O Ruby tem o que chamamos de expressões de controle de fluxo. Elas controlam a forma como o programa vai rodar e assumem um valor verdadeiro ou falso. Existem operadores que podem ser usados para criar valores verdadeiros ou falsos, conhecidos como operadores de comparação.
Existem duas expressões de controle principais que definem qual código vai rodar e qual não vai. Ou seja, qual bloco vai rodar.
Essas duas são: if e a expressão unless.
Os operadores de comparação são usados para comparar valores e retornar um valor true ou false.
Os operadores a seguir exigem dois valores do mesmo tipo para serem comparados.
Se os valores não forem do mesmo tipo, o compilador lança um erro.
Veja a seguir uma lista dos operadores e um exemplo de quando eles resultam em true:
| Método | Descrição | Exemplo |
|---|---|---|
| < | menor que | 4 < 5 |
| <= | menor ou igual | 4 <= 4 |
| > | maior que | 3 > 1 |
| >= | maior ou igual | 2 >= 2 |
Os operadores de igualdade e desigualdade podem ser usados para comparar qualquer tipo de valor, ao contrário dos operadores já mencionados.
O operador == verifica se dois valores são iguais, e isso inclui verificar o tipo do valor.
O != funciona do mesmo jeito, mas retorna true se os valores não forem iguais e false se forem iguais.
Veja a seguir uma lista dos operadores de igualdade e desigualdade e um exemplo de quando eles resultam em true:
| Método | Descrição | Exemplo |
|---|---|---|
| == | igual | 4 == 4 |
| != | diferente | 5 != 4 |
O operador de comparação combinado (às vezes chamado de operador nave espacial) é um operador de comparação especial.
Ele é especial porque não retorna um valor verdadeiro ou falso, mas sim um número.
Ele é escrito como <=> e serve para comparar 2 valores.
Ele retorna 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 verifica se uma determinada condição é "verdadeira" ou "falsa".
Se a condição for verdadeira, o código dentro da condicional if será 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 parecida com a condicional if, mas executa o código dentro da condicional unless se a condição for falsa.
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 junto com a condicional if.
A cláusula else será executada se o bloco do 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 junto com a condicional if.
A cláusula elsif será executada se o bloco do if não for executado e a condição da cláusula elsif for verdadeira.
As cláusulas elsif podem ser encadeadas, e a primeira condição verdadeira será executada.
Também pode haver uma cláusula else no final da condicional if, que será executada se nenhuma das condições anteriores for 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]. Isso é útil quando você quer rodar uma única linha de código se uma condição for verdadeira.
Basta colocar a condicional if ou unless depois do código que você quer rodar.
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