when com Múltiplos Valores
Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy. Lição 39 de 56.
Uma única cláusula when pode corresponder a qualquer um de vários valores, separados por vírgulas. A ramificação é acionada se o sujeito for igual a qualquer um deles.
day = "Sat"
kind = case day
when "Sat", "Sun" then "weekend"
when "Mon", "Tue", "Wed", "Thu", "Fri" then "weekday"
end
puts kind # fim de semanaIsso é muito mais limpo do que encadear || em um if/elsif.
Você também pode misturar tipos de valores em um único when: strings, ranges, padrões regex, todos são apenas coisas que respondem a ===:
def describe(x)
case x
when 0, nil then "empty"
when 1..9 then "small"
when 10..99 then "medium"
when /^huge:/i then "flagged huge"
end
endEscolha as formas que tornam cada ramificação fácil de ler com um simples relance.
Desafio
FácilLeia um único caractere (uma linha de entrada). Use um case com ramificações when de múltiplos valores para imprimir um dos seguintes:
vowel: a entrada é um dea, e, i, o, u(insensível a maiúsculas/minúsculas, converta a entrada para minúsculas primeiro)digit: a entrada é um de0..9(use um intervalo)punctuation: a entrada é um de.,,,!,?other: qualquer outra coisa
Trate a entrada como uma string de um único caractere. Teste o branch de dígitos usando um intervalo como "0".."9".
Para a entrada E o resultado é vowel; para 7 é digit; para ! é punctuation.
Experimente você mesmo
ch = gets.chomp
# TODO: case ch.downcase ... com ramos when de múltiplos valores
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