Il tipo Boolean
di Scala, che corrisponde al tipo boolean
di Java, ha due possibili valori, true e false, rappresentabili dai letterali true
e false
. Come in Java, le espressioni booleane sono composte:
true
e false
!b
b && b
b || b
e == e
, e != e
, e <= e
, e >= e
, e < e
, e > e
), applicabili a operandi di tipi uguali o compatibili (nel caso dei tipi di base, le regole di compatibilità sono analoghe a quelle di Java).Al fine di applicare il modello di sostituzione alle espressioni booleane, bisogna specificare le regole di riduzione (riscrittura) per gli operatori booleani, che sono le seguenti (dove b
è un’arbitraria espressione booleana):
Si noti che nei casi (4) e (5) l’operando destro non viene valutato; questo comportamento, comune anche nei linguaggi imperativi, prende il nome di lazy evaluation o short-circuit evaluation.
In Scala esiste un costrutto if-else
che esprime la scelta tra due alternative; esso ha una forma simile a quella di Java, ma invece che un’istruzione è un’espressione, chiamata espressione condizionale, che viene valutata e produce un valore. In particolare la sintassi di questo costrutto è
$$ \texttt{if (predicate) then-expr} $$
oppure
$$ \texttt{if (predicate) then-expr else else-expr} $$
dove:
predicate
è un’espressione booleana (la condizione, che in ambito di programmazione funzionale viene più spesso chiamata predicato)then-expr
e else-expr
sono espressioni di tipi tra loro compatibiliIntuitivamente, il risultato della valutazione di un’espressione condizionale è il valore di then-expr
se predicate
ha valore true
, mentre è il valroe di else-expr
se predicate
ha valore false
. Cosa avvenga esattamente quando predicate
è falso e non viene specificata la else-expr
verrà spiegato più avanti, ma semplificando si potrebbe dire che l’espressione “non restituisce nulla”.
Un esempio di espressione condizionale è il corpo della seguente funzione, che calcola il valore assoluto di un numero intero