Corso di Raku / Avanzato / Controllo di flusso / given e
when
Matching di intervalli, tipi e condizioni
Un blocco when non confronta solo per uguaglianza.
Esegue uno smart match tra il topic e il valore fornito, quindi
è possibile confrontare intervalli, tipi e condizioni, non solo singoli
valori.
Intervalli
Un intervallo corrisponde quando il topic rientra al suo interno.
Questo rende given/when una scelta naturale
per raggruppare numeri in fasce:
my $score = 75;
given $score {
when 90..100 { say 'A' }
when 80..89 { say 'B' }
when 70..79 { say 'C' }
default { say 'F' }
}Il valore 75 rientra nell’intervallo
70..79, quindi il programma stampa:
CTipi
Un tipo corrisponde quando il topic è di quel tipo. Questo permette di ramificare in base al tipo di valore che si ha:
my $value = 'Raku';
given $value {
when Int { say 'an integer' }
when Str { say 'a string' }
}Poiché $value contiene una stringa, il programma
stampa:
a stringCondizioni
È possibile anche usare un confronto direttamente. All’interno del
when, il topic è disponibile come $_, quindi
una condizione come $_ < 0 corrisponde quando è
vera:
my $n = -7;
given $n {
when $_ < 0 { say 'negative' }
when 0 { say 'zero' }
default { say 'positive' }
}Qui il primo when corrisponde, e il programma
stampa:
negativePratica
Risolvi 1 quiz sul contenuto di questo argomento.
Navigazione del corso
← given e
when | Quiz —
when →
💪 Oppure vai direttamente agli esercizi di questa
sezione.