Nomi di variabili e funzioni
Quinto articolo dedicato al generatore di codice Blockly che condivide le esperienze fatte con questo strumento nel corso delle attività del progetto. Si aggiunge a Blockly: istruzioni per l’uso 4. Riguardo lo scopo delle variabili è possibile leggere anche: Blockly: istruzioni per l’uso 5.
Blockly fa dell’assenza di sintassi la sua forza ma questo a volte può provocare confusione o peggio errori difficili da scoprire. Ci riferiamo al fatto che è possibile definire e usare una variabile che ha lo stesso nome di una funzione: questa dicotomia non viene segnalata come un errore.
Date un’occhiata ai blocchi che seguono …
Abbiamo definito la funzione Nome(parametro) che, semplicemente, aggiunge al valore del parametro il numero 123. Per farlo usa una variabile che si chiama esattamente come la funzione (anche le stesse maiuscole e minuscole): Nome. Il piccolo programma funziona correttamente, il blocco print … visualizza 125 come ci si poteva aspettare.
Non è un buon comportamento, in progetti più complessi, anche di poco, questa omonimia potrebbe provocare dubbi e rendere difficile la lettura del codice anche se il colore dei blocchi può aiutare a distinguere la funzione dei due oggetti (procedura e variabile).
Il problema è che i linguaggi di programmazione non permettono di avere due entità con lo stesso esatto nome. Infatti Blockly stesso, per generare il codice in un diverso linguaggio, che sia Python o Javascript, rinomina automaticamente la funzione in Nome2(…). Qui di seguito, come esempio, la trascrizione in Python del piccolo programma mostrato in precedenza:
parametro = None
Nome = None
"""Describe this function... """
def Nome2(parametro):
global Nome
Nome = parametro + 123
return Nome
print(Nome2(2))
Si vede bene come la funzione, sia nella definizione che nell’utilizzo, è diventata Nome2 mentre la variabile è rimasta Nome. Con tutti i problemi che ne potrebbero derivare in seguito …
Come evitare l’errore
C’è un modo semplice: seguire una convenzione, tra quelle più diffuse, per i nomi delle variabili e delle funzioni. Per esempio:
- i nomi delle variabili hanno la prima lettera sempre minuscola ma le iniziali delle altre parole sempre maiuscola (per esempio tassoDiInteresse, primaSoluzione, incremento);
- i nomi delle funzioni e delle procedure hanno sempre la prima lettera maiuscola, così come le iniziali di eventuali altre parole presenti nel nome (in questo modo le procedure potrebbero avere nomi come CalcolaTassoDiInteresse, RisolviEquazione, AggiungiIncremento).
Con questa convenzione il programmino di esempio sarebbe:
Il programma mostrato in precedenza in cui le variabili hanno l’iniziale minuscola e le funzioni maiuscola. I due oggetti (la variabile nome e la procedura Nome) ora hanno nomi differenti. Blockly ora genera il codice, per esempio in Python, senza modifiche inaspettate (vedi di seguito …).
parametro = None
nome = None
"""Describe this function... """
def Nome(parametro):
global nome
nome = parametro + 123
return nome
print(Nome(2))