Le variabili nel C++, finalmente!

Finalmente parliamo di variabili, ma prima mi piace riassumere ciò che abbiamo imparato sino ad oggi, per rinfrescarci la memoria e verificare se abbiamo memorizzato bene.
//includo il file iostream nel progetto:

#include <iostream>

/* la direttiva using mi permette di non
specificare ogni volta il namespace:
*/

using namespace std;

//main, la funzione principale di ogni programma C++
//int che precede il nome della funzione indica che
//la funzione restituisce un numero intero:

int main()
{ //le parentesi graffe delimitano il contenuto della funzione

//l'istruzione cout:

cout <&lt "l'istruzione cout stampa una stringa a schermo" << endl;

//prima di concludersi la funzione main restituisce il valore 0
//ad indicare che il programma è terminato senza errori.
//se il programma crasha prima di arrivare all'istruzione return,
//il sistema operativo saprà che c'è stato un errore:

return 0;
}
Abbiamo imparato cos'è la funzione main, abbiamo imparato il significato della direttiva #include, cosa sono le librerie di funzioni (ad esempio iostream), e come stampare a schermo del testo.

Ecco, più o meno questo è tutto quello che abbiamo imparato sino ad ora. E' importante avere chiaro il significato di ogni parte del codice qui sopra prima di proseguire. In caso contrario è meglio riguardarsi gli argomenti precedenti e solo quando avrete tutto chiaro potrete tornare a questo post.

Se avete tutto chiaro e siete in grado di riscrivere in modo autonomo il codice appena visto, senza dover sbirciare, allora possiamo proseguire nello studio delle variabili.

Come abbiamo già detto in passato, un programma è essenzialmente un insieme di dati e di algoritmi.
Per fare un parallelo nella vita di tutti i giorni, possiamo prendere i nostri fornelli di cucina.
Immaginiamo di dover preparare una torta.
Le dosi dei vari ingredienti sono i dati, mentre il procedimento della ricetta che trasforma gli ingredienti iniziali in una torta finale è l'algoritmo.
Visto che parliamo di variabili, che sono dei contenitori di dati, tralasciamo per ora l'algoritmo.

uova = 5;
farina = 0,5;
zucchero = 0,2;

Questi sono i dati della nostra ricetta, e sono formati da un identificativo (il nome) e da un valore.
Mettiamo che la ricetta (il nostro codice) dica di sbattere prima 2 uova, e solo dopo aggiungere le 3 uova rimanenti, e infine sbattere ancora il tutto.
Lo pseudo-codice necessario a fare ciò può essere simile a questo:

uova = 2; //ora la variabile uova contiene 2 uova

sbatti(uova); //chiamiamo l'algoritmo sbatti, che si occupa di sbattere le 2 uova

uova = uova + 3; //questo dice di aggiungere alle uova precedenti altre 3 uova
//ora la variabile uova conterrà in tutto 5 uova

sbatti(uova); //richiamiamo l'algoritmo sbatti, che questa volta sbatterà 5 uova

Questo è quello che succede in cucina, ora vediamo cosa avviene nel nostro computer:
#include <iostream>

using namespace std;

int main()
{

int uova; //dichiarazione variabile

uova = 2; //assegno alla variabile uova il valore 2

cout <&lt "il numero di uova è: " << uova;

uova = uova + 3; //questo significa: uova = 2 (il valore precedente di uova) + 3

cout <&lt "ora il numero di uova è: " << uova;

cout <&lt
}
Vediamo le nuove linee una per una.

1) int uova;

Questa riga dichiara una nuova variabile di tipo intero.
Da questo momento in poi avremo a disposizione una variabile di nome "uova", che potremo utilizzare all'interno del nostro programma come contenitore di interi.
Esistono linguaggi, detti loosely typed, dove le variabili non hanno un tipo predefinito, ma possono contenere qualsiasi cosa.
Il C++ non è uno di questi, bisogna quindi specificare il tipo della variabile, e una variabile di tipo intero potrà contenere solo numeri interi. Allo stesso modo una variabile di tipo stringa potrà contenere solo stringhe di testo, e così via.
In generale nel C++ ogni variabile, quando dichiarata per la prima volta, deve essere preceduta dall'identificativo del tipo di dato che andrà a contenere.

2) uova = 2;

Questa riga assegna alla variabile uova il numero 2. Ora la variabile uova conterrà il numero 2.

Volendo avremmo potuto unire le due righe in una sola, nel modo seguente:

int uova = 2;

In questo modo dichiariamo la variabile e le assegniamo un valore iniziale in una sola riga.
Quando ad una variabile viene assegnato un valore al momento della sua dichiarazione, si parla di inizializzazione.

3) cout << "il numero di uova è: " << uova << endl;

L'istruzione cout stampa la stringa "valore della variabile uova: ", dopodiché stampa il valore della variabile uova, e infine va a capo con endl. Notate le freccette, che servono a concatenare più stinghe (la frase iniziale più il contenuto della variabile uova) in un solo output.

Come possiamo vedere, per stampare una stringa così com'è dobbiamo racchiuderla tra doppi apici " ", mentre per stampare il contenuto di una variabile dobbiamo scrivere il nome stesso della variabile, ma senza le virgolette.

L'output dell'istruzione precedente è:

il numero di uova è: 2

Se invece avessimo messo la variabile uova tra virgolette, nel modo seguente:

cout << "valore della variabile uova: " << "uova" << endl;

avremmo avuto l'output:

il numero di uova è: uova

Il compilatore avrebbe infatti interpretato "uova" come una stringa letterale, mentre l'assenza di virgolette dice al compilatore che uova è una variabile, e quindi non deve stampare la parola uova ma, essendo questa una variabile, deve stampare il suo contenuto.

Ricordate che in C++ tutto ciò che è racchiuso da virgolette viene interpretato come una stringa di testo.

3) uova = uova + 3;

Prima di questa riga la variabile uova conteneva il valore 2.
Questa istruzione dice al compilatore:
//ASSEGNA A UOVA | IL VALORE DI UOVA | PIU' 3
uova = uova +3
Il compilatore sostituisce a uova il valore attuale, che è 2. In altre parole il compilatore legge:

uova = 2 + 3

Dopo questa istruzione la variabile uova conterrà il valore 5.
Infatti il secondo cout stamperà:

ora il numero di uova è: 5

Se all'interno del nostro programma volessimo modificare il numero di uova, ad esempio perché ci siamo accorti che 5 sono poche per sfamare tutti i nostri amici, nessuno ci vieterà di assegnare alla variabile uova un nuovo valore, scrivendo:

uova = 10;

La variabile uova di tipo intero ora conterrà il valore 10.

Da questo post abbiamo capito che in C++ una variabile va prima di tutto dichiarata, per poter essere utilizzata (tralascio il main e tutto il resto per comodità ma ormai sapete che va messo):

{

int uova = 5; //dichiaro la variabile uova e la inizializzo al valore 5
int farina; //dichiaro la variabile farina di tipo int

//oh no, siamo in troppi, meglio usare 10 uova

uova = 10; //assegno alla variabile uova il valore 10

//vediamo, quanta farina possiamo usare?

farina = 1; //assegniamo alla variabile farina il valore 1

//ci vuole un po' di zucchero, non sono un bravo cuoco

zucchero = 2; //ERRORE!!!

Assegno alla variabile zucchero il valore 2. Ma, aspetta un momento, non esiste nessuna variabile di nome zucchero! Infatti abbiamo dichiarato solo le variabili uova e farina, mentre ci siamo dimenticati di dichiarare la variabile zucchero.

Per poter utilizzare la variabile zucchero dobbiamo prima dichiararla:

int zucchero;

Ora il compilatore sa che esiste una variabile di nome zucchero, e che potrà contenere numeri interi. La variabile è ancora indefinita perché ci siamo limitati a dichiararla, senza inizializzarla ad un valore iniziale.
Porevamo dichiarare la variabile ed inizializzarla sulla stessa riga per comodità:

int zucchero = 2;

Ma ammettiamo di non conoscere ancora la quantità di zucchero necessaria, e di proseguire la scrittura del programma mentre attendiamo che la nostra ragazza, che è più brava di noi, torni a casa e ci aiuti.

Perciò decidiamo di limitarci a dichiarare la variabile zucchero, sapendo che dovremo utilizzarla in futuro nel programma, ma non la inizializziamo a nessun valore di partenza, non conoscendolo.

Poi quando la nostra ragazza tornerà a casa e ci dirà la quantità giusta di zucchero per una torta, ci basterà scrivere all'interno del nostro programma:

zucchero = 2; //assegnamo il valore 2 alla variabile zucchero dichiarata prima

La nostra ragazza ci fa notare che la torta è più buona con un po' di cioccolato e rum, ed anche una bella decorazione con la panna non sarebbe male.
Procediamo quindi con l'aggiunta dei tre nuovi ingredienti:

int cioccolato, rum, panna;

In C++ è infatti possibile dichiarare più variabili dello stesso tipo in una sola linea, proprio come abbiamo appena fatto.

In questo post abbiamo imparato che:

- le variabili sono dei contenitori di dati;

- devono essere dichiarate prima di poterle usare;

- durante la dichiarazione dobbiamo specificare il tipo di dato che la variabile dovrà contenere, e questo avviene facendo precedere al nome della variabile un identificatore di tipo, ad esempio int per gli interi;

- durante la dichiarazione possiamo eventualmente inizializzare la variabile con un valore di partenza;

- una volta dichiarata una variabile possiamo utilizzarla ogni volta che vogliamo, assegnandole dei valori, che devono essere coerenti con il tipo della variabile;

- non possiamo utilizzare una variabile se prima non l'abbiamo dichiarata!

Abbiamo detto che l'atto di creare una variabile si dice dichiarazione. In alcuni casi si usa invece il termine definizione. Benché il significato sia leggermente diverso, per ora per semplicità considerateli sinonimi. Magari in futuro vedremo qual'è la differenza, ma per ora non ci interessa.

E' buona norma inizializzare una variabile. Infatti al momento della sua creazione, la variabile viene collegata ad un'area di memoria in cui andranno a memorizzarsi i dati salvati nella variabile stessa.
Se dichiariamo una variabile senza inizializzarla, sinché non assegniamo un valore alla variabile, questa conterrà ciò che è presente nell'area di memoria al momento della dichiarazione, che può essere qualsiasi cosa.
Purtroppo il programma non si prende la briga di svuotare la memoria associata alla variabile, perciò è sempre bene inizializzarla. Se la variabile all'inizio non deve avere nessun valore, basta inizializzarla ad un valore nullo:

int var2 = 0;

Questa era solo un'introduzione alle variabili, per darvi un'idea di come funzionano. Nel prossimo post vedremo meglio il loro utilizzo, i tipi di variabile esistenti nel C++, ed altre cose.

Nessun commento:

Posta un commento