Sezione 5

Funzioni e GO Block

Definire funzioni con FUN e THEN, ed eseguire blocchi condizionati con GO.

Progresso del corso 50%

Funzioni

Le funzioni sono blocchi di codice che vengono descritti senza essere eseguiti. Si eseguono solo quando vengono chiamati.

FUN

FUN nome_funzione(parametri)
    ...
    return valore
    FEND
FUN ciao()
    TALK ciao
    FEND
  ciao()
  <* Output: ciao *>

  nome = Mario
  FUN saluta(n)
    TALK ciao @n!
    #num = 5
    return @num
    FEND
  val = saluta(nome)
  TALK @val
  <* Output:
  ciao Mario!
  5 *>

THEN

Forma semplificata di funzione: non accetta parametri e non può avere return. Si chiude con THEND.

THEN nome_then
    ...
    THEND

I blocchi THEN possono essere chiamati solo all'interno di un GO block.

GO Block

GO esegue una funzione o un blocco THEN in base a una condizione booleana.

GO @var_condizione @nome_funzione #ripetizioni
IF se = V
  THEN allora
    TALK Evviva!
    THEND
  GO @se @allora       >> esegue una volta

  GO @se @allora #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:

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. La condizione può essere anch'essa inline:

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

La variabile speciale THISGO contiene la condizione del GO corrente e può essere modificata per interrompere il loop:

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