if / unless inline
Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy — lição 41 de 56.
O Ruby permite que você coloque if e unless no final de uma única instrução, como um modificador de linha única. Lê-se quase como inglês.
puts "Adult" if age >= 18
puts "Save your work" unless savedIsso é o mesmo que:
if age >= 18
puts "Adult"
end
unless saved
puts "Save your work"
endA forma inline se destaca para verificações do tipo guard-style no topo de um método, ou para atualizações condicionais pontuais dentro de um loop:
return if name.nil? || name.empty?
counts = Hash.new(0)
words.each do |w|
counts[w] += 1 unless w.start_with?("#")
endComo o ternário, use modificadores inline para instruções curtas. Se o corpo tiver mais de uma linha, escreva um bloco if real em vez disso.
Desafio
FácilLeia uma lista de inteiros separados por vírgula. Para cada número, imprima uma linha, mas apenas quando o número for diferente de zero:
- Imprima
positive: <n>sen > 0 - Imprima
negative: <n>a menos quen >= 0
Ambas as linhas devem usar a forma de modificador inline (sem bloco if, sem else). Após o loop, imprima Skipped zeros: <count>, onde a contagem é o número de zeros, também calculada sem um bloco if (use count).
Para a entrada 3,-2,0,5,0, a saída é:
positive: 3
negative: -2
positive: 5
Skipped zeros: 2Folha de consulta
O Ruby permite if e unless como modificadores inline ao final de uma única instrução:
puts "Adult" if age >= 18
puts "Save your work" unless savedÚtil para cláusulas de guarda ou atualizações condicionais simples:
return if name.nil? || name.empty?
counts[w] += 1 unless w.start_with?("#")Use modificadores inline apenas para corpos de uma única linha; use um bloco if completo para qualquer coisa mais longa.
Experimente você mesmo
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: imprimir usando `if` / `unless` inline para cada número
# TODO: imprimir Zeros pulados: <n> usando count
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Strings a Fundo
Visão Geral de Métodos de StringInterpolação de StringsIterando sobre StringsSplit e JoinRecapitulação - String Weaver4Blocos, Procs e Lambdas
O que é um Bloco?do..end vs ChavesA palavra-chave yieldParâmetros de BlocoProcs e LambdasRecapitulação - Iterador Customizado7Hashes Parte 2
Hash.new com Valores PadrãoIterando em HashesHashes AninhadosMesclando e TransformandoRecapitulação - Contador de Frequência10Projeto - Registros de Alunos
Visão Geral do ProjetoAdicionar Aluno2Intervalos
O que é um Intervalo?Métodos de IntervaloIntervalos em Case / WhenRecapitulação - Prática com Intervalos5O Poder do Enumerable
Select e RejectEncadeando o MapReduce / Injectcount, all?, any?, none?group_by e partitionsort_by, min_by, max_byRecapitulação - Data Pipeline8Tomada de Decisão Avançada
Case com Classes e Regexwhen com múltiplos valoresOperador Ternárioif / unless inlineRecapitulação - Classificador de Notas