Inform e Glulx/Le basi di Inform/Passaggio dei parametri e ritorno dei valori: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m +indice
Gian BOT (discussione | contributi)
m Bot: sostituzione tag obsoleti
 
Riga 27:
Include "ItalianG";
 
Il primo cambiamento possiamo notarlo subito all’inizio della funzione <ttcode>Funz_princip</ttcode>: gli argomenti questa volta sono due (<ttcode>x</ttcode> e <ttcode>n</ttcode>). Nulla di strano, perché '''una qualsiasi funzione in Inform può avere un massimo di 15 argomenti, separati tra di loro da almeno uno spazio'''. Quando poi viene chiamata la funzione <ttcode>Quadrato</ttcode> viene anche passato il valore tra parentesi (detto [[w:Parametro_(programmazione)|parametro]]) contenuto all’interno della variabile <ttcode>x</ttcode>. Ecco in sostanza quello che accade:
* alla riga <ttcode>n = Quadrato(x);</ttcode> il programma salta alla funzione <ttcode>Quadrato</ttcode> e il valore contenuto nella variabile <ttcode>x</ttcode> (in questo caso 5) viene assegnato alla variabile <ttcode>number</ttcode> (definita nella funzione <ttcode>Quadrato</ttcode>);
* viene poi eseguita l’elevazione al quadrato e il valore ottenuto (25) viene restituito, mediante l’istruzione <ttcode>return</ttcode>, e assegnato alla variabile <ttcode>n</ttcode> della funzione <ttcode>Funz_princip</ttcode>.
 
[[Immagine:Inform e Glulx-sp.gif|centre|435 px|]]
Riga 35:
Se qualcuno di voi ha le idee confuse, si concentri su quello che sto per dire adesso: '''una variabile può essere locale (viene cioè vista solo all’interno della funzione in cui è definita) o globale (viene cioè vista in qualsiasi punto del programma)'''.
 
Proviamo a riscrivere la funzione <ttcode>Quadrato</ttcode> in questo modo:
 
[ Quadrato number;
Riga 42:
 
e compiliamo nuovamente il programma: il ''file eseguibile'' non viene creato, perché sono presenti ben due errori, nell’ordine:
* "<ttcode>No such constant as x</ttcode>" che, tradotto in italiano, significa "<ttcode>Non c’è nessuna variabile denominata x</ttcode>". Questo accade perché la variabile locale <ttcode>x</ttcode> è stata definita nella funzione <ttcode>Funz_princip</ttcode> e appartiene ad essa soltanto. Ecco quindi il motivo per cui ho definito una nuova variabile <ttcode>number</ttcode> all’interno della funzione <ttcode>Quadrato</ttcode>; se non lo avessi fatto, il valore 5 sarebbe andato irrimediabilmente perso nel momento in cui il programma sarebbe passato dalla funzione <ttcode>Funz_princip</ttcode> alla funzione <ttcode>Quadrato</ttcode>.<br> Occorre anche notare che se definisco questa funzione nel seguente modo:<br><br><ttcode>[ Quadrato x;<br> return x*x;<br> ];</ttcode><br><br> il programma funziona perfettamente, ed è normale che sia così. Infatti, la variabile <ttcode>x</ttcode> definita all’interno della funzione <ttcode>Quadrato</ttcode> è diversa dalla variabile <ttcode>x</ttcode> definita all’interno della funzione <ttcode>Funz_princip</ttcode>;
* "<ttcode>Local variable number declared but not used</ttcode>" che, tradotto in italiano, significa "<ttcode>La variabile locale number è stata dichiarata ma non usata</ttcode>". Ecco dunque un’altra regola sacrosanta di questo linguaggio: '''tutte le variabili da noi dichiarate, devono essere usate'''. Nella funzione <ttcode>Quadrato</ttcode> viene definita la <ttcode>number</ttcode>, ma al suo posto viene usata la <ttcode>x</ttcode>: ecco il motivo dell’errore.
 
Qualcuno di voi potrebbe però chiedersi: perché, al posto di usare più variabili locali non ne uso una sola globale? Perché di funzioni in un’avventura testuale ce ne sono moltissime e usare solo delle variabili globali diventa veramente un azzardo: si genera troppa confusione e aumenta il rischio che Inform scambi un valore per un altro. Comunque, a scopo puramente didattico, ecco come usare una variabile globale con l’esempio di prima:
Riga 74:
Include "ItalianG";
 
Come potete vedere, la variabile globale <ttcode>x</ttcode>, essendo stata dichiarata al di fuori di una qualsiasi funzione<ref> O di un qualsiasi ''oggetto'', come vedremo meglio nel capitolo 4.</ref>, può essere vista, riconosciuta e modificata in qualsiasi punto del programma<ref>Cliccate [http://www.vincenzoscarpa.it/inform/manuale/Capitolo3_esercizi.zip qui] per scaricare i listati dei due esercizi (i file '''3.06_1.inf''' e '''3.06_2.inf''').</ref>.
 
== Note ==