Ruby ha quelle che vengono chiamate espressioni di controllo di flusso: servono a controllare il modo in cui il programma viene eseguito e assumono un valore «truthy» o «falsey». Esistono operatori che si possono usare per creare valori «truthy» o «falsey», e sono quelli che chiamiamo operatori di confronto.
Ci sono due espressioni di controllo principali che decidono quale codice verrà eseguito e quale no, cioè quale ramo, tra quelli disponibili, verrà preso.
Queste due sono: l'espressione if e l'espressione unless.
Gli operatori di confronto servono a confrontare valori e restituiscono un valore true o false.
Gli operatori seguenti richiedono che i due valori confrontati siano dello stesso tipo.
Se i valori non sono dello stesso tipo, il compilatore solleva un errore.
Ecco un elenco degli operatori e un esempio di quando restituiscono un valore true:
| Metodo | Descrizione | Esempio |
|---|---|---|
| < | minore di | 4 < 5 |
| <= | minore o uguale | 4 <= 4 |
| > | maggiore di | 3 > 1 |
| >= | maggiore o uguale | 2 >= 2 |
Gli operatori di uguaglianza e disuguaglianza, a differenza di quelli appena visti, possono confrontare qualsiasi tipo di valore.
L'operatore == serve a verificare se due valori sono uguali, e questo include il controllo del tipo del valore.
L'operatore != funziona allo stesso modo, ma restituisce true se i valori non sono uguali e false se lo sono.
Ecco un elenco degli operatori di uguaglianza e disuguaglianza, con un esempio di quando restituiscono un valore true:
| Metodo | Descrizione | Esempio |
|---|---|---|
| == | uguale | 4 == 4 |
| != | diverso | 5 != 4 |
L'operatore di confronto combinato (talvolta chiamato spaceship operator) è un operatore di confronto speciale.
È speciale perché non restituisce un valore «truthy» o «falsey», ma un numero.
Si scrive <=> e serve a confrontare 2 valori.
Restituisce 1 se il valore di sinistra è maggiore di quello di destra, -1 se il valore di sinistra è minore di quello di destra, e 0 se i valori sono uguali.
1 <=> 2 # => -1
2 <=> 2 # => 0
3 <=> 2 # => 1
L'istruzione if serve a verificare se una data condizione è «truthy» o «falsey».
Se la condizione è «truthy», il codice all'interno dell'istruzione if viene eseguito.
Un'istruzione if termina con la parola chiave end.
value = 1
if value == 1
"1 is equal to 1"
end
# => "1 is equal to 1"
if value > 2
"1 is greater than 2"
end
# => nil
L'istruzione unless funziona in modo molto simile all'istruzione if, ma esegue il codice al suo interno se la condizione è «falsey».
value = 1
unless value == 1
"1 is not equal to 1"
end
# => nil
unless value > 2
"1 is not greater than 2"
end
# => "1 is not greater than 2"
L'istruzione else può essere usata insieme all'istruzione if.
L'istruzione else viene eseguita se il ramo if non viene eseguito.
value = 1
if value == 1
"1 is equal to 1"
else
"1 is not equal to 1"
end
# => "1 is equal to 1"
if value > 2
"1 is greater than 2"
else
"1 is not greater than 2"
end
# => "1 is not greater than 2"
L'istruzione elsif può essere usata insieme all'istruzione if.
L'istruzione elsif viene eseguita se il ramo if non viene eseguito e la condizione dell'istruzione elsif è «truthy».
Le istruzioni elsif possono essere incatenate tra loro e viene eseguita la prima condizione «truthy».
Alla fine dell'istruzione if può esserci anche un'istruzione else, che viene eseguita se nessuna delle istruzioni precedenti era vera.
value = 1
if value == 0
"1 is equal to 0"
elsif value > 2
"1 is greater than 2"
else
"1 is not equal to 0 and 1 is not greater than 2"
end
# => "1 is not equal to 0 and 1 is not greater than 2"
Le istruzioni if e unless possono essere usate anche come [suffisso][if-as-suffix]: è utile quando vuoi eseguire una singola riga di codice se una condizione è vera. Si fa mettendo l'istruzione if o unless dopo il codice che vuoi eseguire.
value = 1
"1 is equal to 1" if value == 1
# => 1 is equal to 1
"1 is not equal to 1" unless value == 1
# => nil