Intervalos em Case / When
Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy. Lição 8 de 56.
Os intervalos se destacam dentro da instrução case do Ruby. Enquanto muitas linguagens precisam de uma sequência de if/elsif com operadores de comparação, o Ruby permite comparar um valor diretamente com intervalos.
score = 78
grade = case score
when 90..100 then "A"
when 80..89 then "B"
when 70..79 then "C"
when 60..69 then "D"
else "F"
end
puts grade # CNos bastidores, when 70..79 usa o operador === do intervalo, que é equivalente a (70..79).include?(score).
A forma case é mais curta, mais fácil de ler e mais rápida de escrever do que uma longa sequência de if/elsif.
Desafio
FácilLeia uma lista de idades inteiras separadas por vírgulas. Para cada idade, classifique-a com uma instrução case usando intervalos:
0..12:Child13..19:Teen20..64:Adult65ou mais:Senior- Qualquer outra coisa (negativa): ignorada, não entra no relatório
Imprima uma linha de contagem para cada categoria diferente de zero, nesta ordem fixa: Child, Teen, Adult, Senior. Ignore as categorias com zero pessoas. Após as contagens, imprima Skipped: <n>, onde n é o número de idades negativas (inválidas).
Para a entrada 5,15,30,70,-3,40,12, a saída é:
Child: 2
Teen: 1
Adult: 2
Senior: 1
Skipped: 1Experimente você mesmo
ages = gets.chomp.split(",").map(&:to_i)
# TODO: classifique cada idade com case + ranges, conte por categoria, imprima o relatório
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 DadosPratique por conta própria: Compilador de Ruby online