if, elsif, else: a forma completa
Uma forma familiar, finalmente nomeada completamente
O if como modificador no fim da linha apareceu em Ruby: felicidade do dev. Métodos Ruby usou blocos if/elsif/else completos em classify e check_age sem dar nome ao formato. Este curso o cobre por inteiro: condicionais, &&, || e as checagens padrão de que todo programa Ruby depende.
O bloco completo
def classify_temperature(degrees)
if degrees >= 30
"hot"
elsif degrees >= 15
"warm"
else
"cold"
end
end
classify_temperature(35) # => "hot"
classify_temperature(20) # => "warm"
classify_temperature(5) # => "cold"
O Ruby confere cada condição de cima para baixo e roda o corpo da primeira que for truthy, pela regra de truthiness de Ruby: números & booleans. Quando uma casa, os elsif restantes não são avaliados.
Quantos ramos elsif você precisar
Você pode encadear quantos elsif os casos pedirem, cada um conferido em ordem até um casar.
def grade_letter(score)
if score >= 90
"A"
elsif score >= 80
"B"
elsif score >= 70
"C"
elsif score >= 60
"D"
else
"F"
end
end
A ordem importa. Uma nota 95 casa com score >= 90 e para. Também é verdade que 95 >= 80, mas esse ramo nunca é alcançado.
else é opcional
O else é opcional. Sem ele, se nada casar, o bloco if vale nil, discretamente, sem erro.
# Traduz o nome de um dia de fim de semana; qualquer outro dia não tem resposta.
def weekend_name(day)
if day == "Saturday"
"Sábado"
elsif day == "Sunday"
"Domingo"
end
end
weekend_name("Saturday") # => "Sábado"
weekend_name("Tuesday") # => nil, nenhum ramo combinou, e não há else
Isso se liga ao retorno implícito de Métodos Ruby. O bloco if é a última expressão de weekend_name, então o valor dele, nil aqui, é o que o método devolve.
Todo if é ele mesmo uma expressão
Isso explica por que esses exemplos funcionam. Um bloco if/elsif/else é uma expressão com valor próprio, como 5 + 3 ou uma chamada de método. Você pode atribuí-lo, devolvê-lo ou usá-lo direto.
status = if degrees >= 30
"hot"
else
"not hot"
end
Por isso classify_temperature e grade_letter não precisam de return. O bloco if produz um valor, e ele sai do método.
O que este curso cobre
- Aula 1,
if,elsif,else: o bloco condicional completo, enfim com nome (você está aqui) - Aula 2,
unless: a forma de bloco completa, e quando evitá-la - Aula 3, Combinando condições com
&&,||e!: montando checagens compostas a partir de simples - Aula 4, Avaliação de curto-circuito: por que a ordem de uma condição composta importa
- Aula 5,
and/or: as versões em palavra, por que existem, e a armadilha de usá-las - Aula 6,
case/when: uma alternativa mais limpa a uma cadeia longa deelsif - Aula 7, Juntando tudo: um pequeno desafio combinando tudo
No final, você vai conhecer todo formato condicional do código Ruby real e quando usar cada um.
Continue com a aula 2
unless: o inverso direto do if
A forma de bloco do unless, seu uso como guard clause e por que o RuboCop desaconselha juntá-lo com else.
Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.