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írgula da entrada. Imprima duas linhas:
- Cada número dobrado, unido com
,. Use a forma de chaves (brace) domap. - A string
"<n> squared is <n*n>"para cada número, uma por linha. Use a formado...enddoeach.
Para a entrada 1,2,3, a saída é:
2, 4, 6
1 squared is 1
2 squared is 4
3 squared is 9Folha de consulta
Blocos Ruby possuem duas sintaxes:
Chaves { ... } para blocos de uma única linha:
[1, 2, 3].map { |n| n * 2 } # [2, 4, 6]do...end para blocos de múltiplas linhas:
[1, 2, 3].each do |n|
doubled = n * 2
puts "#{n} -> #{doubled}"
endAmbas as formas retornam a última expressão do bloco (usada por métodos como map).
Experimente 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 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