Le variabili, impariamo a lavorare con i dati
![](/fondamenti/programmazione-101/06-variabili-impariamo-a-lavorare-con-i-dati/images/cover.jpg)
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) |
---|---|
FirstName | firstName |
EmailAddress | emailAddress |
ZipCode | zipCode |
- 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:
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
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)
numbers.add(30)
numbers.add(40)
numbers.remove(20)
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):
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:
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:
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!"
Operatori — Cosa possiamo fare con le variabili
OPERATORI ARITMETICI
Nome | Simbolo | Esempio | Descrizione |
---|---|---|---|
Addizione | + | 6 + 2 | Somma due valori |
Sottrazione | — | 6 — 2 | Sottrae due valori |
Moltiplicazione | ******* | 6 * 2 | Moltiplica due valori |
Divisione | / | 6 / 2 | Divide due valori |
Modulo | % | 6 % 2 | Ritorna 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.
Nome | Simbolo | Esempio | Descrizione |
---|---|---|---|
Uguale | == | age == 13 | Compare due valori e ritorna true se sono uguali |
Diverso | != | age != 13 | Compare due valori e ritorna true se non sono uguali |
Maggiore di | > | age > 13 | Ritorna true se l’operando sulla sinistra è maggiore di quello sulla destra |
Minore di | < | age < 13 | Ritorna true se l’operando sulla sinistra è minore di quello sulla destra |
Maggiore o uguale a | >= | age >= 13 | Ritorna true se l’operando sulla sinistra è maggiore o uguale a quello sulla destra |
Minore o uguale a | <= | age <= 13 | Ritorna 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.
Nome | Simbolo | Esempio | Descrizione |
---|---|---|---|
And | && | age > 12 && age < 20 | Le condizioni in entrambi i lati dell’operatore `&& devono essere vere per far si che l’intero statement venga valutato a vero. |
Or | **_ | _** | |
Not | ! | !raining | Questo operatore inverte il valore di un singolo booleano. quindi se il valore è vero il risultato sarà falso e viceversa. |