Inform e Glulx/Le basi di Inform/If (condition) then... else...
Nella stesura di un programma, le scelte sono quasi sempre d’obbligo, proprio come avviene in questo esempio:
! Esempio sull’utilizzo dell’istruzione IF THEN – versione 1
Include "Parser"; Include "VerbLib"; Include "Replace";
[ Funz_princip; ClearScreen(); ! pulisce lo schermo Domanda(); print "^Premi un tasto per uscire^"; KeyCharPrimitive(); ! legge un carattere dalla tastiera ];
[ Domanda x; print "^Ogni quanti anni compare la cometa di Halley? "; x = GetNumber(2); if (x == 76) print "La risposta @`e esatta!!!^"; ];
[ Initialise; Funz_princip(); quit; ! fine del programma ];
Include "Io"; Include "ItalianG";
Tradotta in italiano, l’istruzione if (condition) then suona più o meno così: se (condizione) allora. In questo caso, se il numero introdotto dall’utente è proprio 76, allora il programma stampa a video "La risposta è esatta!!!", altrimenti prosegue senza visualizzare nulla.
Fate molta attenzione a non confondere l’operatore = con l’operatore ==; il primo, come già sapete da quanto visto finora, assegna un certo valore a una variabile, mentre il secondo verifica che un certo valore (in questo esempio 76) sia uguale a un altro (in questo caso il valore contenuto nella variabile x, ovvero il numero digitato dall’utente mediante l’istruzione Getnumber). Gli altri operatori sono:
(a ~= b)➨ a è diverso da b(a > b)➨ a è maggiore di b(a < b)➨ a è minore di b(a >= b)➨ a è maggiore o uguale a b(a <= b)➨ a è minore o uguale a b
È anche possibile usarli insieme, ma in questo caso bisogna utilizzare anche gli operatori logici, nell’ordine:
&&detto anche "AND" ➨ es:if ((a > 5) && (b < 10))➨ restituiscetrue(la condizione è cioè soddisfatta) se il valore contenuto nella variabileaè maggiore di 5 e se il valore contenuto nella variabilebè minore di 10;||detto anche "OR" ➨ es:if ((a > 5) || (b < 10))➨ restituiscetruese il valore contenuto nella variabileaè maggiore di 5 oppure se il valore contenuto nella variabilebè minore di 10.
Questo operatore non deve essere confuso con l’operatore (non logico)orche viene usato per testare più valori in una volta sola (ad es.:if (a == 2 or 3 or 4) print...);~~detto anche "NOT" ➨ es:if (~~ (a > 5))➨ restituiscetruese il valore contenuto nella variabileaè minore di 5 (la condizione viene cioè negata e di conseguenza invertita).

Così com’è, il nostro esempio stampa un messaggio nel caso in cui l’utente risponda correttamente alla domanda. E se invece sbaglia?
Non è un’idea così malvagia, quella di modificare il nostro programma in modo tale che stampi un messaggio anche nel caso di una risposta errata da parte dell’utente. Ecco una possibile soluzione:
! Esempio sull’utilizzo dell’istruzione IF THEN - versione 2
Include "Parser"; Include "VerbLib"; Include "Replace";
[ Funz_princip; ClearScreen(); ! pulisce lo schermo Domanda(); print "^Premi un tasto per uscire^"; KeyCharPrimitive(); ! legge un carattere dalla tastiera ];
[ Domanda x; print "^Ogni quanti anni compare la cometa di Halley? "; x = GetNumber(2); if (x == 76) print "La risposta @`e esatta!!!^"; else print "Spiacente, la risposta non @`e esatta...^"; ];
[ Initialise; Funz_princip(); quit; ! fine del programma ];
Include "Io"; Include "ItalianG";
di nuovo c’è solo l’istruzione else, che in italiano significa altrimenti e viene usata solo insieme all’istruzione if-then. Ecco quello che accade: se il numero digitato dall’utente è uguale a 76 viene stampato il messaggio "La risposta è esatta!!!", mentre se è diverso da 76 viene stampato il messaggio "Spiacente, la risposta non è esatta..."[1].
Note
[modifica | modifica sorgente]