Estruturas Condicionais
Estruturas de controle de fluxo (ou estruturas condicionais) são úteis para executar determinadas ações de acordo com uma condição.
Em Ruby, temos as estruturas if, elsif, else e case que desempenham esse papel.
Supondo que você queira imprimir o conteúdo da variável nome apenas se a idade for maior que 18 anos:
# condicional.rb
idade = 25
nome = "Jorge"
if idade > 18
puts nome
end
$ ruby condicional.rb
=> Jorge
Note que o Ruby não exige o uso de parênteses para usar a estrutura. Isso é chamado de Syntax Sugar, ou "açúcar sintático" da linguagem, que visa deixar o código mais legível.
Podemos deixar ainda mais legível:
puts nome if idade > 18
Apenas leia a linha de código acima: "imprima nome se a idade for maior que 18". Esta é uma das grandes vantagens da linguagem, muitas vezes é possível deixar o seu código mais legível.
Analise os códigos abaixo:
numero = 5.4
if numero > 2 and numero < 4
puts "Maior que 2 e menor que 4"
elsif numero > 4 and numero < 5
puts "Maior que 4 e menor que 5"
else
puts "Nenhum dos casos acima!"
end
O exemplo acima demonstra o uso de estruturas condicionais compostas.
pais = "Brasil"
case pais
when "EUA"
puts "America do Norte"
when "Alemanha"
puts "Europa"
when "China"
puts "Asia"
when "Brasil"
puts "America do Sul"
end
Por fim, a estrutura case é semelhante à estrutura switch da linguagem C. Ela é mais compacta quando usada para muitas alternativas.
O valor nulo
Quando desejamos representar algum valor vazio em Ruby, usamos a palavra reservada nil.
Podemos imprimir uma mensagem de boas vindas caso o coneúdo da variável nome tenha algum valor não nulo usando o método nil?:
# nil.rb
nome = "Cronos"
puts "Seja bem-vindo #{nome}" if not nome.nil?
$ ruby nil.rb
=> Seja bem-vindo Cronos
Caso a variável tenha o valor nil:
nome = nil
puts "Seja bem-vindo #{nome}" if not nome.nil?
Neste caso nenhuma mensagem será exibida, a variável nome é nula e o método nil? retorna true. Como fazemos a negação usando o not o valor é invertido e portanto false.
Pode parecer complicado, mas com a prática tudo se tornará bem mais natural.
Uma sugestão é que simplifique o uso do if not sempre que possível. O Ruby possui a palavra reservada unless que desempenha o mesmo papel do if not:
puts "5 eh maior que 4" unless 4 > 5
Leia: "imprima 5 é maior que 4 a menos que 4 é maior que 5". Como 4 não é maior que 5, a comparação retorna false e é impressa a mensagem.