Intervalos em Case / When
Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy — lição 8 de 56.
Intervalos (Ranges) se destacam dentro da instrução case do Ruby. Onde muitas linguagens precisam de uma cadeia de if/elsif com operadores de comparação, o Ruby permite que você compare um valor com intervalos diretamente.
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 if/elsif em escada.
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 (negativo): ignorado, não entra no relatório
Imprima uma linha de contagem para cada categoria diferente de zero, nesta ordem fixa: Child, Teen, Adult, Senior. Pule 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: 1Folha de consulta
Use intervalos em instruções case — o Ruby faz a correspondência via === (equivalente a include?):
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 # CExperimente você mesmo
ages = gets.chomp.split(",").map(&:to_i)
# TODO: classificar cada idade com case + intervalos, contar por categoria, imprimir 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 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 Pipeline