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. O ramo é acionado 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 # weekendIsso é muito mais limpo do que encadear || em um if/elsif.
Você também pode misturar tipos de valores em um when: strings, intervalos, 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 tornem cada branch fácil de ler rapidamente.
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 e 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 ramo digit usando um intervalo como "0".."9".
Para a entrada E a saída é vowel; para 7 é digit; para ! é punctuation.
Folha de consulta
Uma cláusula when pode corresponder a múltiplos valores separados por vírgulas:
case day
when "Sat", "Sun" then "weekend"
when "Mon", "Tue", "Wed", "Thu", "Fri" then "weekday"
endVocê pode misturar strings, intervalos e padrões regex no mesmo case:
case x
when 0, nil then "empty"
when 1..9 then "small"
when /^huge:/i then "flagged huge"
endExperimente 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 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