if / unless em uma Linha
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: 2Experimente você mesmo
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: imprimir usando `if` / `unless` inline para cada número
# TODO: print Skipped zeros: <n> using 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 em Profundidade
Visão Geral dos Métodos de StringInterpolação de StringsPercorrendo StringsDividir e UnirRecapitulação - String Weaver4Blocos, Procs e Lambdas
O que é um Bloco?do..end vs ChavesA Palavra-chave yieldParâmetros de BlocoProcs e LambdasRevisão - Iterador Personalizado7Hashes - Parte 2
Hash.new com Valores PadrãoIterando sobre 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 / WhenRevisão - Prática com intervalos5Potência do Enumerable
Select e RejectEncadeando MapReduce / Injectcount, all?, any?, none?group_by e partitionsort_by, min_by, max_byRecapitulação - Pipeline de Dados8Tomada de Decisões Avançada
Case com Classes e Regexwhen com Múltiplos ValoresOperador Ternárioif / unless em uma LinhaRecapitulação - Classificador de NotasPratique por conta própria: Compilador de Ruby online