Parâmetros de Bloco
Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy — lição 18 de 56.
As variáveis entre os pipes, |x|, |x, y|, são os parâmetros de bloco. Elas nomeiam os valores que o método passa para o bloco.
Alguns métodos passam um valor, outros passam vários. each passa um elemento por vez:
[10, 20, 30].each { |n| puts n }each_with_index passa dois, o elemento e seu índice:
["a", "b", "c"].each_with_index do |letter, i|
puts "#{i}: #{letter}"
end
# 0: a
# 1: b
# 2: cAo iterar um hash, os parâmetros do bloco são chave e valor:
{ a: 1, b: 2 }.each do |key, value|
puts "#{key} = #{value}"
endO número e a ordem dos parâmetros de bloco dependem do que o método produz. Em caso de dúvida, consulte a documentação ou tente um parâmetro e veja o que acontece.
Desafio
FácilO hash scores é fornecido. Itere sobre ele com each_with_index em sua forma to_a para que você tenha acesso tanto ao par (name, points) quanto à sua posição. Imprima uma linha por entrada neste formato:
<rank>. <name> - <points>Onde rank começa em 1 (não 0).
Para o hash padrão, a saída é:
1. Alice - 90
2. Bob - 85
3. Cara - 78Folha de consulta
Parâmetros de bloco são nomeados entre pipes |...| e recebem valores fornecidos pelo método:
# each – one parameter
[10, 20, 30].each { |n| puts n }
# each_with_index – element and index
["a", "b", "c"].each_with_index do |letter, i|
puts "#{i}: #{letter}"
end
# hash each – key and value
{ a: 1, b: 2 }.each do |key, value|
puts "#{key} = #{value}"
endhash.to_a converte um hash em um array de pares [key, value], útil com each_with_index:
{ a: 1, b: 2 }.to_a.each_with_index do |(key, value), i|
puts "#{i}: #{key} = #{value}"
endExperimente você mesmo
scores = { "Alice" => 90, "Bob" => 85, "Cara" => 78 }
# TODO: imprimir "<rank>. <name> - <points>" para cada entrada, o rank começa em 1
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