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.