Le variabili, impariamo a lavorare con i dati

Questo è il post #6 di 12 nella serie “Fondamenti di Programmazione 101

Dichiarare e inizializzare una variabile

Quando scriviamo dei programmi software, abbiamo continuativamente la necessità di lavorare con dei dati e inoltre
abbiamo la necessità di tenere traccia di questi dati. Per fare ciò, utilizziamo le variabili.

Dare un nome alle variabili

Il nome che diamo a una variabile dovrebbe riflettere i dati che rappresenta, quindi se utilizziamo una variabile per salvare un indirizzo email, un buon nome da utilizzare sarebbe email, invece un nome del tipo foo
sarebbe alquanto contro indicato.

Molti linguaggi sono case-sensitive (fanno differenza fra maiuscolo e minuscolo) quando parliamo di nomi di variabili.

Inoltre, ci sono diverse convenzioni ma in generale, quasi tutti i linguaggi di programmazione seguono una delle due varianti seguenti:

  • Camel Case: Questa convenzione si basa sul fatto che le parole che costituiscono un nome sono separate da una lettera in maiuscolo all’inizio di ogni parola. Ci sono due sotto tipi, upper camel case (anche
    conosciuta come Pascal case) e lower camel case (anche conosciuta come Dromedary case). Vediamo
    alcuni esempi:
Upper Camel Case (Pascal Case)Lower Camel Case (Dromedary Case)
FirstNamefirstName
EmailAddressemailAddress
ZipCodezipCode
  • Snake Case: Separare le parole con un underscore ( _ ) è chiamato snake case. Quando usiamo questa convenzione, si usano soltanto lettere in minuscolo e ogni parola viene separata da un underscore. Ripresentare l’esempio precedente ma in snake case risulterebbe come segue:
    • first_name
    • email_address
    • zip_code
CONVENZIONE PER I NOMI

Convenzione per i nomi, o naming convention, è il modo raccomandato per dare nomi a cose, come per esempio variabili.

Quando approcciamo un nuovo linguaggio di programmazione, una delle prime cose da fare è quella d’imparare le sue convenzioni.

Tipi di dati primitivi

Ogni variabile ha sia un nome che un tipo. Il tipo definisce che tipo di dato può essere salvato nella variabile. Di solito, un linguaggio di programmazione ha alcuni tipi definiti nel linguaggio (chiamati built-in types), chiamati tipi primitivi o tipi base e che gestiscono un singolo valore.

Analizziamo brevemente alcuni dei tipi di dato primitivi comunemente trovati nella maggior parte dei linguaggi di programmazione.

TIPO BOOLEANO

Abbiamo già discusso dell’ Algebra Booleana e come possiamo usare i valori true e false e come possiamo combinare questi valori utilizzando gli operatori and, or e not.

Per poter utilizzare questi valori all’interno del nostro programma, dobbiamo utilizzare un tipo di dato primitivo adatto, chiamato booleano.

Una variabile di tipo booleano può contenere soltanto uno di questi due valori, true o false.

TIPO NUMERICO

Tipi numerici appartengono a due sotto categorie, tipi interi e tipi decimali.

TIPI COMPOSTI

Un tipo di dato composto è costituito da più di un valore.

Array Fisso / Fixed Array

Quando abbiamo un array di dimensione fissa, definiamo quanti slots l’ array deve avere a tempo di creazione. La dimensione non può essere modificata una volta che l’ array è stato creato.

Solitamente si crea un nuovo array con una sintassi simile alla seguente: numbers[10]

Qui stiamo dicendo di voler creare un array che può contenere 10 numeri interi ed è chiamato numbers. Non stiamo effettivamente salvando alcun valore all’interno dell’array con la precedente dichiarazione quindi queste 10 locazioni che abbiamo creato non hanno alcun valore assegnato abbiamo lo spazio assegnato in memoria e abbiamo un nome attraverso il quale possiamo riferirci all’ array.

Potremmo vedere questa situazione come se avessimo 10 variabili diverse ma queste variabili verrebbero salvate con lo stesso nome.

Visivamente possiamo immaginare la precedente dichiarazione come segue:

Definizione di un array

Adesso abbiamo bisogno di accedere a uno specifico slot all’interno dell’array. Questo viene fatto attraverso l’indice. Possiamo accedere a uno specifico slot usando il nome della variabile più l’indice racchiuso fra parentesi quadre.

numbers[2] = 100

Assegnazione di una valore ad un array

Con la precedente dichiarazione, stiamo assegnando allo slot con indice 2 il valore di 100. IMPORTANTE: in un array, il primo indice parte dal valore ZERO e non dal valore UNO.

Array Dinamico / Dynamic Array

Un array dinamico è un array la cui dimensione può essere estesa o ridotta mentre viene utilizzato. Questi tipi di arrays, inizialmente vengono creati vuoti ma è possibile aggiungere o rimuovere elementi in modo da modificarne a runtime la dimensione.

Come creiamo un array dinamico dipende dal linguaggio di programmazione che usiamo ma può assomigliare a una dichiarazione del genere:
numbers = []
in questo modo creiamo un array dinamico vuoto.

Possiamo aggiungere e rimuovere elementi dall’ array con dei metodi (che dipendono dal linguaggio che stiamo usando), per esempio:

numbers.add(20)

Aggiunta di una valore ad un array

numbers.add(30)

Aggiunta di una secondo valore ad un array

numbers.add(40)

Aggiunta di un terzo valore ad un array

numbers.remove(20)

Rimozione di una valore da un array

Molti linguaggi di programmazione forniscono metodi per inserire o rimuovere, per esempio, all’inizio dell’array, alla fine o anche in un punto specifico all’interno.

Diversi linguaggi di programmazione consentono di salvare all’interno di un array, solo dati dello stesso tipo anche se alcuni consentono dati mixati.

Il tipo Record

Supponiamo che nel nostro programma vogliamo rappresentare informazioni che riguardano un cliente, la maggior parte dei linguaggi fornisce un tipo di dato chiamato record o anche conosciuto con il nome di structures o structs.

La prima cosa, dobbiamo decidere quali informazioni il nostro record cliente conterrà. Queste possono essere informazioni come il nome, il cognome, la via, la città, il codice di avviamento postale, ecc. e queste informazioni possono essere di tipo diverso.

Per definire un record, possiamo avere qualcosa del genere (specifico per linguaggio):

Tipo Record

Abbiamo definito un nuovo tipo chiamato Client che può salvare informazioni riguardo il nome, il cognome, la via, la città e il codice postale.

Possiamo creare una variabile di questo tipo in questo modo: Client client1 ma ancora non conterrà alcuna informazione.

Per assegnare dei valori alla variabile client1 possiamo fare nel seguente modo:

Tipo Record - Esempio

Il tipo Dizionario (Dictionary)

Un dizionario, anche conosciuto come una map, hashmap o un array associativo, è un tipo di dato collection che usa una coppia di chiave-valore. La chiave deve contenere un valore univoco che viene utilizzato per ottenere il valore associato con la chiave. Spesso un due punti, separa la chiave dal valore.

Per esempio, potremmo avere un dictionary di canzoni dove la chiave è il titolo della canzone e il valore associato alla chiave è l’autore:

Tipo Dizionario - Esempio

Il tipo Set

Il tipo Set è un tipo di dato composto che contiene valori univoci senza un ordine. Considerato che questo tipo non è ordinato, non possiamo usare un indice per accedere ai suoi elementi.

Il tipo Enumerazione

Enumerazione, spesso chiamate semplicemente enum, è un tipo di dato enumerato con valori distinti. Possiamo usarlo per creare i nostri tipi di dati e forzare che uno o più valori siano del tipo di dato enumerato.

Il tipo Stringa

Anche il tipo stringa è un tipo di dato composto perché la stringa viene salvata come un array di caratteri.

Molti linguaggi adottano la convenzione di usare doppi apici per definire che qualcosa è una stringa e singoli apici per definire che è un carattere. Altri linguaggi utilizzano in maniera intercambiabile sia i doppi apici che quelli singoli per definire una stringa o un carattere.

Esempio:

greeting = "Hello World!"

Hello World - Esempio


Operatori — Cosa possiamo fare con le variabili

OPERATORI ARITMETICI

NomeSimboloEsempioDescrizione
Addizione+6 + 2Somma due valori
Sottrazione6 — 2Sottrae due valori
Moltiplicazione*******6 * 2Moltiplica due valori
Divisione/6 / 2Divide due valori
Modulo%6 % 2Ritorna il resto della divisione intera

OPERATORI RELAZIONALI

Un operatore relazione è utilizzato quando vogliamo comparare due valori. I valori possono essere uguali o no oppure possiamo voler sapere se uno è maggiore dell’altro.

NomeSimboloEsempioDescrizione
Uguale==age == 13Compare due valori e ritorna true se sono uguali
Diverso!=age != 13Compare due valori e ritorna true se non sono uguali
Maggiore di>age > 13Ritorna true se l’operando sulla sinistra è maggiore di quello sulla destra
Minore di<age < 13Ritorna true se l’operando sulla sinistra è minore di quello sulla destra
Maggiore o uguale a>=age >= 13Ritorna true se l’operando sulla sinistra è maggiore o uguale a quello sulla destra
Minore o uguale a<=age <= 13Ritorna true se l’operando sulla sinistra è minore di quello sulla destra
OPERATORI LOGICI

Questi operatori sono usati per rappresentare le operazioni di and, or e not.

NomeSimboloEsempioDescrizione
And&&age > 12 && age < 20Le condizioni in entrambi i lati dell’operatore `&& devono essere vere per far si che l’intero statement venga valutato a vero.
Or**__**
Not!!rainingQuesto operatore inverte il valore di un singolo booleano. quindi se il valore è vero il risultato sarà falso e viceversa.