Parte I — Le basi
Capitolo 2 — Variabili e costanti
Un programma che non ricorda nulla può fare ben poco. Le variabili sono i cassetti in cui il programma mette i dati per ritrovarli più tardi: un punteggio, un nome, una lista della spesa. Ogni cassetto ha un nome che scegli tu, e dentro ci metti un valore.
Dichiarare e cambiare
In Leo una variabile si dichiara la prima volta con la parola variabile, seguita dal nome, un segno di uguale e il valore iniziale. Dopo, per cambiarle valore, basta il nome e il segno di uguale:
variabile punti = 0
scrivi "All'inizio: {punti}"
punti = 10
scrivi "Dopo aver segnato: {punti}"
punti += 5
scrivi "Con il bonus: {punti}"All'inizio: 0
Dopo aver segnato: 10
Con il bonus: 15Nota la differenza: la prima volta serve variabile (stai creando il cassetto); le volte successive no (il cassetto esiste già, lo stai solo riempiendo di nuovo). L'ultima riga usa +=, una scorciatoia che vuol dire «aggiungi a quello che c'è già»: punti += 5 è identico a punti = punti + 5. Esistono anche -=, *= e /=, con lo stesso senso.
💡 L'idea — L'etichetta e il contenuto
Una variabile è come un armadietto con un'etichetta. Il nome che scegli è l'etichetta incollata sullo sportello; il valore è ciò che hai messo dentro. Quando scrivi
punti = 10stai cambiando il contenuto dell'armadietto, non l'etichetta: il nome resta lo stesso, cambia solo quello che custodisce. Ecco perché puoi riempirlo e svuotarlo quante volte vuoi senza doverlo ri-dichiarare.
Questa regola — variabile solo alla nascita — non è una formalità noiosa. Serve a proteggerti dai refusi. Se scrivi per sbaglio pnuti = 3 pensando a punti, Leo non crea di nascosto una variabile nuova: si ferma e te lo dice.
ErroreNome alla riga 1, colonna 1 di programma.leo
1 | pnuti = 3
| ^^^^^
`pnuti` non esiste ancora: una variabile nuova si crea con `variabile`.
Suggerimento: Scrivi `variabile pnuti = 3`; dopo, per cambiarle valore, basta `pnuti = ...`.In un linguaggio che crea le variabili al volo, quel refuso sarebbe passato inosservato e il bug si sarebbe manifestato molto più tardi, molto più lontano.
Stampare il valore, non il nome
Qui c'è una trappola gentile in cui tutti inciampano una volta. Ricordi che scrivi senza parentesi tratta quello che segue come testo? Allora questa riga:
scrivi punti...non stampa il valore di punti: stampa la parola punti. Per mostrare il valore hai due strade, entrambe corrette:
scrivi(punti) # forma con parentesi: calcola e stampa il valore
scrivi "Punti: {punti}" # interpolazione: il valore entra nel testoTienilo a mente: le parentesi (o le graffe dentro un testo) vogliono dire «calcola». Senza di esse, scrivi prende le parole alla lettera. È la stessa regola del capitolo scorso, vista da un'altra angolazione; dopo un po' diventa naturale.
Le costanti: valori che non devono cambiare
A volte un valore non deve mai cambiare per tutta la vita del programma: l'aliquota IVA, il numero di giocatori, il titolo di una finestra. Per questi casi c'è la costante, che si dichiara con costante:
costante IVA = 22
variabile prezzo = 100
scrivi "Prezzo con IVA: {prezzo + prezzo * IVA / 100}"Prezzo con IVA: 122.0(Il risultato è 122.0, con il punto e lo zero: la divisione / in Leo dà sempre un numero decimale. Ne parleremo nel prossimo capitolo.)
La differenza con una variabile è che una costante, una volta dichiarata, non si può più cambiare. Se ci provi, Leo ti ferma:
ErroreValore alla riga 2, colonna 1 di programma.leo
2 | IVA = 10
| ^^^
`IVA` è una costante: non si può cambiare il suo valore.
Suggerimento: Se deve cambiare, dichiarala con `variabile` invece di `costante`.Non è una punizione: è una rete di sicurezza. Dichiarare costante un valore che non deve cambiare documenta la tua intenzione e impedisce che un errore distratto lo modifichi. Usa costante ogni volta che puoi; variabile solo quando il valore deve davvero cambiare.
🦁 Curiosità — La costante che definisce il metro
La velocità della luce nel vuoto vale esattamente 299.792.458 metri al secondo. «Esattamente» non è un modo di dire: dal 1983 quel numero è fissato per convenzione, e il metro viene definito a partire da esso, come la distanza che la luce percorre in una frazione precisa di secondo. In natura come nel codice, una costante serve proprio a questo: dare un nome stabile a un valore su cui tutto il resto può appoggiarsi.
Più valori in una volta sola
Una dichiarazione (o un'assegnazione) può riguardare più nomi insieme, separati da virgole. È comodo quando i valori arrivano da una lista o quando vuoi assegnarne diversi in una riga:
variabile nome, anni = ["Beatrice", 24]
scrivi "{nome} ha {anni} anni"
variabile a, b = 1, 2
a, b = b, a
scrivi "a vale {a}, b vale {b}"Beatrice ha 24 anni
a vale 2, b vale 1L'ultima riga merita attenzione: a, b = b, a scambia i due valori senza bisogno di una variabile d'appoggio. Funziona perché Leo calcola prima tutti i valori a destra e solo dopo li assegna. Se nomi e valori non sono lo stesso numero, l'errore te lo dice con precisione: «Ci sono 2 nomi ma 3 valori.»
Aumentare e diminuire a parole
Oltre a += e -=, Leo offre due parole che si leggono come una frase: aumenta e diminuisci. Dopo di scrivi di quanto; senza di, vuol dire di uno:
variabile punti = 0
variabile vite = 3
aumenta punti di 10
diminuisci vite
scrivi "Punti: {punti}, vite: {vite}"Punti: 10, vite: 2Sono perfettamente equivalenti a punti += 10 e vite -= 1: scegli la forma che in quel punto si legge meglio.
Dove vive una variabile
Ogni blocco di codice — lo vedremo meglio parlando di cicli e funzioni — ha un suo spazio. Una variabile dichiarata dentro un blocco con variabile esiste solo lì dentro; fuori non si vede. Per cambiare invece una variabile che esisteva già prima, basta il segno di uguale (senza variabile):
variabile totale = 0
per ogni n in [1, 2, 3] fai
variabile doppio = n * 2 # esiste solo dentro il ciclo
totale += doppio # cambia la variabile di fuori
fine
scrivi "Il totale è {totale}"Il totale è 12La variabile doppio nasce e muore a ogni giro del ciclo; totale, dichiarata fuori, sopravvive e accumula. Questa separazione — che si chiama visibilità o ambito — tiene i programmi ordinati: le variabili temporanee non «sporcano» il resto del codice. Torneremo sull'argomento quando parleremo di funzioni, dove conta davvero.
I nomi
Qualche parola sui nomi delle variabili, perché nomi buoni valgono più di molti commenti. Un nome inizia con una lettera o un trattino basso _ e prosegue con lettere, cifre e trattini bassi. Le lettere accentate sono ammesse, quindi età e città sono nomi legittimi. Scegli nomi che dicono cosa contengono: media_voti è meglio di m, prezzo_finale è meglio di x. Il tuo io del mese prossimo ti ringrazierà.
Prova tu
- Dichiara una costante con il tuo anno di nascita e una variabile con l'anno corrente, poi stampa quanti anni compi quest'anno.
- Crea tre variabili
a,b,ccon tre valori a tuo piacere su una riga sola, poi ruotale:aprende il valore dib,bquello dic,cquello dia. Stampa i tre valori prima e dopo. - Prova a scrivere
scrivi prezzo(senza parentesi) in uno degli esempi e guarda cosa succede. Poi correggilo inscrivi(prezzo). Hai capito la differenza?