O Ruby tem o que se chama expressões de controlo de fluxo. Servem para controlar a forma como o programa corre e assumem um valor truthy ou falsey. Há operadores que podem ser usados para criar valores truthy ou falsey; são os operadores de comparação.
Existem duas expressões de controlo principais que determinam que código corre e que código não corre. Ou seja, qual dos ramos é executado.
Essas duas são a expressão if e a expressão unless.
Os operadores de comparação são usados para comparar valores e devolvem um valor true ou false.
Os operadores seguintes exigem que os dois valores a comparar sejam do mesmo tipo.
Se os valores não forem do mesmo tipo, o compilador dá um erro.
Eis uma lista dos operadores e um exemplo de quando devolvem um valor true:
| Método | Descrição | Exemplo |
|---|---|---|
| < | menor que | 4 < 5 |
| <= | menor ou igual a | 4 <= 4 |
| > | maior que | 3 > 1 |
| >= | maior ou igual a | 2 >= 2 |
Os operadores de igualdade e de desigualdade podem ser usados para comparar qualquer tipo de valor, ao contrário dos operadores já mencionados.
O operador == serve para verificar se dois valores são iguais, o que inclui verificar o tipo do valor.
O != funciona da mesma forma, mas devolve true se os valores não forem iguais e false se forem iguais.
Eis uma lista dos operadores de igualdade e de desigualdade e um exemplo de quando devolvem um valor true:
| Método | Descrição | Exemplo |
|---|---|---|
| == | igual a | 4 == 4 |
| != | diferente de | 5 != 4 |
O operador de comparação combinado (por vezes chamado operador nave espacial) é um operador de comparação especial.
É especial no sentido em que não devolve um valor truthy ou falsey, mas sim um número.
Escreve-se <=> e serve para comparar 2 valores.
Devolve 1 se o valor da esquerda for maior que o da direita, -1 se o valor da esquerda for menor que o da direita, e 0 se os valores forem iguais.
1 <=> 2 # => -1
2 <=> 2 # => 0
3 <=> 2 # => 1
if
A condicional if é usada para verificar se uma dada condição é "truthy" ou "falsey".
Se a condição for truthy, o código dentro da condicional é executado.
Uma condicional if termina com a palavra-chave 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
unless
A condicional unless funciona de forma muito semelhante à condicional if, mas executa o código dentro da condicional unless se a condição for 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"
else
A cláusula else pode ser usada em conjunto com a condicional if.
A cláusula else é executada se o ramo if não for executado.
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"
A cláusula elsif pode ser usada em conjunto com a condicional if.
A cláusula elsif é executada se o ramo if não for executado e a condição da cláusula elsif for truthy.
As cláusulas elsif podem ser encadeadas e a primeira condição truthy é executada.
Também pode haver uma cláusula else no fim da condicional if, que é executada se nenhuma das anteriores tiver sido verdadeira.
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"
if e unless como sufixoAs condicionais if e unless também podem ser usadas como [sufixo][if-as-suffix]. Isto é útil quando queres executar uma única linha de código se uma condição for verdadeira. Faz-se colocando a condicional if ou unless depois do código que queres executar.
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