Lโultima volta, nella Lezione 3, ci siamo occupati delle operazioni base in C++ ma non abbiamo parlato dellโoperatore piรน interessante, ovvero lโASSIGNMENT che viene rappresentato dal simbolo = e, fondamentalmente, dร una variabile ad un nuovo valore.
Se, per esempio, ho un iniziale int a = 3 e voglio cambiare il suo valore in 5 scriverรฒ a = 5. Questo puรฒ essere messo in pratica anche con le stringhe. Lโassignment serve ogni qualvolta vogliamo dare ad una variabile un nuovo valore. Vediamo, allora, un piccolo esempio e scriviamo un programma che trova la ripetizione delle parole allโinterno di un testo:
//Controlla le parole che sono state ripetute #include "iostream" #include "string" using namespace std; int main () { string previous = ""; //parola precedente; "non una parola" string current; //parola corrente (parola piรน recente" while (cin>>current) { //leggi una sequenza di parole if (previous == current) //controlla se la parola รจ uguale all'ultima cout <<"parola ripetuta: " <<current <<'\n'; previous=current; } }
Questo tipo di codice fa normalmente parte della maggior parte di software dedicati ai controlli grammaticali.ย
Allora, come sempre abbiamo aperto il programma specificando il tipo di librerie (iostream e string) e l’utilizzo di std di cui si รจ parlato in maniera piรน approfondita nella Lezione 1 e nella Lezione 2.
Guardiamo, ora, il corpo della funzione. Nella prima riga avvertiamo il nostro programma che la parola iniziale “non รจ una parola”. Mentreย string current permette immediatamente al computer di leggere la parola usata, ovvero la parola corrente.
Ilย while-statementย nota che l’affermazione successiva, ovvero cin >> current, verrร ripetuta finchรฉ l’operazione non avrร successo; ciรฒ significa anche che l’operazione cin >> current continuerร finchรฉ ci saranno caratteri da leggere. Ricordiamoci cheย CINย si riferisce allo standard input stream definito dalla libreria e che l’operatore >>ย ย (get from, prendi da) specifica dove lโinput dato deve leggere, in questo caso la parola corrente.
Notiamo l’uso dell’operatore IFย (che significa โseโ) giร notato nella lezione precedente il quale, qui, specifica che se la parola precedente รจ uguale a quella corrente allora il programma dovrร specificarlo scrivendo “parola ripetuta: X”.ย Ciรฒ significa che il programma legge una parola e la compara a quella che la precede: se sono uguali lo scrive.ย
Infine useremo l’assignment per dire al programma che la parola precedente diverrร quella corrente man mano che continuerร a leggere il brano.
Sarร evidente, inoltre, la presenza di quattro parentesi graffe { } anzichรฉ due: questo perchรฉ il nostro programma sta svolgendo due specifiche azioni: controllare il brano e, nel mentre, scrivere le parole ripetute.
L’assignment ovviamente non รจ utilizzabile solo per le stringhe ma anche per gli int, ovvero i numeri interi. Spesso, infatti, nei programmi si utilizza l’aumento di una variabile, spesso aggiungendo 1, tant’รจ che รจ stata creata per questo una sintassi specifica:ย ++counter che significa e si puรฒ anche scrivereย counter=counter+1. Questo tipo di assignment viene chiamatoย Composite assignment operators. Vi sono, comunque, molti modi di cambiare il valore di una variabile basandosi sul valore di riferimento, come per esempio:
a+=2 //significa a = a+2 b-=7ย //significa b = b-7 c*=3 //significa c = c*3
Proviamo, quindi, a cambiare il programma qui sopra dandogli un’idea di dove si trovino le parole all’interno della sequenza cosรฌ da fargliele contare e dare poi l’output.
//Controlla e conta, poi, le parole ripetute #include "iostream" #include "string" using namespace std; int main () { int_number_of_words = 0; string previous = "" ; //parola precedente;"non una parola" string current; //parola corrente: la piรน recente while (cin>>current) { ++number_of_words; //aumenta il numero parole if (previous == current) //controlla se la parola precedente รจ uguale a quella corrente cout <<"word number" <<number_of_words; cout <<"repeated: " <<current <<'\n'; previous=current; } }
L’ordine iniziale presente nel corpo della funzione, ovvero int_number_of_word = 0, dice al nostro programma di iniziare a contare da zero: ogni volta che viene rilevata una parola si incrementa il conto con il comando ++number_of_words che puรฒ scriversi anche in altre due modi, ovvero, number_of_words+=1 oppure number_of_words=number_of_words+1.
Fate attenzione quando nominate le variabili poichรฉ non potrete utilizzare caratteri speciali e dovrete sempre iniziare sempre con una lettera.
Questi sono esempi di nomi di variabili corretti:
w number_of_things fourier_transform z3 Square
I seguenti, invece, non sono nomi di variabili:
2x //un nome DEVE iniziare con una lettera time$to$shop //$ non รจ una lettera, un numero o un underscore Start menu //lo spazio non va MAI utilizzato
Possono trovarsi in giro, perรฒ, dei nomi che iniziano con l’underscore (ovvero _ ) come, per esempio, _foo ma questi sono riservati per l’implementazione e le entitร di sistema: evitando di scriverli noi stessi non creeremo confusione, in un secondo momento, tra i nomi che abbiamo creato e quelli che sono stati generati dal sistema.
Riassumiamo, quindi, un po’ di definizioni tanto per rinfrescare la memoria:
TYPE, definisce un set di valori e di operazioni per un object.
OBJECT, รจ una regione di memoria che contiene un valore di un dato type.
VALUE, รจ il valore, ovvero un set di bits nella memoria che vengono interpretati secondo un type.
VARIABLE, รจ una variabile, ovvero un object a cui si รจ dato un nome.
DECLARATION, รจ un’affermazione che da un nome ad un object.
DEFINITION, รจ una declaration che mette da parte la memoria per un dato object.
Un programma si dice essere TYPE-SAFE quando gli objects al suo interno vengono utilizzati tenendo conto delle regole del loro type.
Ci sono dei modi per operare in modalitร non type-sape come, per esempio, usare una variabile senza averla inizializzata ma รจ sconsigliato farlo! Nel caso, comunque, per vari motivi si decida di non usare il type-safe il compiler non sarร in grado di aiutarci ad individuare eventuali errori e, quindi, dovremmo affidarci semplicemente a noi stessi per ricontrollare il codice.
Lascia un commento