Corso di Raku / Fondamenti / Più sulle funzioni
Attenzione agli spazi
Usare le funzioni in Raku è per lo più intuitivo e non causa problemi, ma devi essere avvertito riguardo al seguente aspetto.
TL;DR
Non aggiungere uno spazio tra il nome della funzione e le parentesi con i suoi argomenti. Ma usa uno spazio dopo for
e if
.
Storia lunga
Prendiamo una semplice funzione:
sub f($x, $y) {
return $x + $y;
}
Prima di tutto, nota l’assenza di spazi tra il nome della funzione e la parentesi aperta che contiene i parametri. Alcuni stili di codifica in altre lingue possono richiedere uno spazio lì. Raku va bene con questo, ma non è una pratica da seguire:
sub f ($x, $y) {
return $x + $y;
}
Dal lato della chiamata, l’assenza di spazio è importante. Se chiami la funzione e ometti le parentesi, allora lo spazio dopo il nome della funzione è inevitabile:
f 5, 6;
Ma se aggiungi le parentesi, non puoi avere uno spazio prima di esse. Questa è una chiamata corretta:
f(5, 6);
E questa chiamata è sbagliata:
f (5, 6);
Tale codice causa un’eccezione:
Too few positionals passed; expected 2 arguments but got 1
sub f at t.raku line 1
in block <unit> at t.raku line 5
Raku vede la chiamata con uno spazio f (5, 6)
come un tentativo di passare un singolo argomento (5, 6)
alla funzione. Puoi facilmente controllare il tipo di questo argomento se riscrivi la funzione per accettare solo un argomento:
sub f($param) {
say $param.WHAT;
}
f (5, 6); # (List)
Quindi, chiamare f (5, 6)
significa che stiamo passando una lista alla funzione. La lista come entità singola.
Quando è necessario lo spazio
In alcuni casi, il carattere spazio è necessario. Questo accade quando usi le parentesi con una delle parole chiave, come if
o for
o loop
. Il seguente codice è sbagliato:
if(True != False) {
say 'OK';
}
Il messaggio di errore spiega cosa c’è di sbagliato:
===SORRY!===
The word 'if' is interpreted as a 'if()' function call. Please use
whitespace instead of parentheses.
at /Users/ash/raku-course/t.raku:1
------> if⏏(True != False) {
Unexpected block in infix position (two terms in a row)
at /Users/ash/raku-course/t.raku:1
------> if(True != False)⏏ {
Nel caso di if
, le parentesi non sono affatto necessarie, quindi il problema non ha possibilità di apparire se non le usi. Ma in alcuni casi, come, ad esempio, con loop
, devi averle, e lo spazio diventa obbligatorio:
loop(my $c = 0; $c != 10; $c++) { say $c }
In questo codice, accade la stessa cosa: loop(...)
è interpretato dal compilatore come una chiamata di funzione. Aggiungi uno spazio per risolvere il problema. O meglio riscrivi il frammento usando for
.
Conclusione
In sintesi: per evitare tali problemi, non aggiungere uno spazio tra il nome della funzione e le parentesi con gli argomenti della funzione e cerca di evitare le parentesi se possibile con altre costruzioni del linguaggio come il controllo del flusso.
Navigazione del corso
← Più sulle funzioni | Più sulle funzioni / Parametri tipizzati →
💪 Or jump directly to the exercise to this section.
Questa pagina è tradotta automaticamente con ChatGPT 4o. Testo originale in inglese.
Traduzioni di questa pagina: English • Deutsch • Español • Italiano • Latviešu • Nederlands • Български • Русский • Українська