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.