do..end vs Chaves
Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy. Lição 16 de 56.
Ruby oferece duas maneiras de escrever um bloco. Elas significam a mesma coisa, mas cada uma tem um caso de uso preferencial.
do...end é para blocos de múltiplas linhas:
[1, 2, 3].each do |n|
doubled = n * 2
puts "#{n} -> #{doubled}"
endChaves { ... } são para blocos de linha única, curtos, em formato de expressão:
[1, 2, 3].each { |n| puts n * 2 }Os dois têm precedências ligeiramente diferentes, mas a regra que os alunos precisam é a de estilo: chaves para instruções de uma linha, do...end para múltiplas linhas.
Ambas as formas podem retornar um valor. A última expressão do bloco é o que é passado de volta para métodos como map:
[1, 2, 3].map { |n| n * 10 } # [10, 20, 30]
[1, 2, 3].map do |n|
n * 10
end # [10, 20, 30]Desafio
FácilLeia uma lista de inteiros separados por vírgulas da entrada. Imprima duas linhas:
- Cada número duplicado, unido por
,. Use a forma com chaves demap. - A string
"<n> squared is <n*n>"para cada número, uma por linha. Use a formado...enddeeach.
Para a entrada 1,2,3, a saída é:
2, 4, 6
1 squared is 1
2 squared is 4
3 squared is 9Experimente você mesmo
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: linha 1, dobrados, forma de chaves do map, unidos com ", "
# TODO: linhas 2..n, quadrados, forma do...end do each
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