Sezione 05 / 08

Funzioni e
GO Block

Come definire blocchi di codice riutilizzabili con FUN e THEN, e come eseguirli condizionatamente o in loop con GO.

5.1 Funzioni con FUN

Una funzione è un blocco di codice che viene descritto senza essere eseguito. Si esegue solo quando viene chiamata.

sintassiFUN nome(parametri) ... return valore FEND

Parametri: variabili esterne da passare alla funzione, separati da virgola. Possono essere zero.

return: facoltativo. Se incluso deve stare alla fine del corpo. Il valore di ritorno può essere salvato o stampato. Una sola istruzione return per funzione.

chiamatanome() >> esegue la funzione var = nome() >> salva il valore di ritorno
esempioFUN saluta(nome) TALK Ciao, @nome! FEND saluta(Mario) FUN doppio(n) #r = @n * 2 return @r FEND #x = doppio(5) TALK @x <* Output: 10 *>

5.2 Blocchi con THEN

THEN è una forma semplificata di funzione: non accetta parametri e non può avere return. Si chiude con THEND.

THEN nome ... THEND

Equivale esattamente a FUN nome() senza return. Viene usato principalmente con il GO block per gestire condizioni.

Nota: i blocchi THEN possono essere chiamati solo all'interno di un GO block. Le funzioni FUN invece si chiamano direttamente con nome().

5.3 GO Block

GO esegue una funzione o un blocco THEN in base ad una condizione booleana, con una ripetizione opzionale.

sintassi completaGO @condizione @blocco #ripetizioni

condizione: variabile IF (o qualsiasi booleano) — il blocco viene eseguito solo se è V.

ripetizioni: quante volte eseguire il blocco. Se 1 si può omettere. Il valore speciale #c ripete finché la condizione rimane V.

esempiIF cond = V THEN stampa TALK Evviva! THEND GO @cond @stampa >> esegue una volta GO @cond @stampa #3 >> esegue 3 volte #i = 0 IF loop = @i < 3 THEN conta TALK @i #i += 1 THEND GO @loop @conta #c >> ripete finché i < 3

Catene: & e &&

Dopo un GO si possono aggiungere rami alternativi con & (elif) e && (else). Solo una condizione può essere vera alla volta.

GO @cond1 @blocco1 & @cond2 @blocco2 && @blocco3 >> se cond1 → blocco1 >> altrimenti se cond2 → blocco2 >> altrimenti → blocco3

Corpo inline con @{}

Invece di definire un THEN separato, si può scrivere il corpo direttamente nel GO con la sintassi @{...}. La condizione si può anch'essa definire inline:

GO @{@n > 0} @{ TALK positivo } && @{ TALK non positivo }

All'interno di un corpo inline, la variabile speciale THISGO contiene la condizione corrente e può essere modificata per interrompere il loop:

GO @{V} @{ TALK @ASKED IF stop = @ASKED == fine GO @stop @{ @THISGO = F } }

Quiz — Sezione 5

8 domande · serve l'80% per passare alla sezione 6

Domanda 01

Qual è la differenza tra FUN e THEN?

AFUN può accettare parametri e avere return; THEN no
BTHEN è più veloce di FUN
CFUN viene eseguito subito, THEN no
DNon c'è differenza, sono sinonimi

Domanda 02

Cosa stampa questo codice?

FUN raddoppia(n) #r = @n * 2 return @r FEND #x = raddoppia(7) TALK @x
A7
B14
CErrore: return non è consentito
Draddoppia(7)

Domanda 03 — Completamento

Esegui il blocco azione solo se cond è vera, per 3 volte.

1

Domanda 04

Cosa significa #c come valore di ripetizioni nel GO?

AEsegue 100 volte
BEsegue finché la condizione rimane vera
CEsegue una sola volta e poi controlla la condizione
DÈ una variabile chiamata c

Domanda 05

In un GO con più rami, cosa fa &&?

AAggiunge un altro ramo condizionale (elif)
BIntroduce un ramo eseguito solo se tutte le condizioni precedenti erano false (else)
CÈ l'operatore AND logico
DInterrompe il GO

Domanda 06

Quante volte viene stampato "ciao" con questo codice?

IF sempre = V THEN saluta TALK ciao THEND GO @sempre @saluta #4
A1
B4
C0 — la condizione non viene mai valutata
DInfinito

Domanda 07 — Completamento

Scrivi un GO inline che stampa "positivo" se n è maggiore di zero, "negativo" altrimenti.

1

Domanda 08

A cosa serve la variabile THISGO?

AContiene il nome del blocco in esecuzione
BContiene la condizione del GO corrente e può essere modificata per interrompere il loop
CConta le iterazioni del GO
DNon esiste, è un errore

Sezione 6 →