O que é um bloco?

Prévia grátis 2 min de leitura

Um bloco é código que você entrega a um método

A maioria das chamadas de método até agora nesta série passou valores simples como argumentos, como access_level("admin", true, false). O merge do curso de hashes recebeu um bloco uma vez, sem explicação. Um bloco é um pequeno pedaço de código sem nome passado para um método, que o método pode rodar, até mais de uma vez.

3.times { puts "hello" }
# hello
# hello
# hello

{ puts "hello" } é o bloco, e times o chama três vezes seguidas. puts "hello" não precisou virar um método com nome antes; o bloco é escrito onde é usado.

Duas sintaxes equivalentes: {} e do...end

3.times { puts "hi" }

3.times do
  puts "hi"
end

Chaves e do/end envolvem um bloco do mesmo jeito. A convenção, não uma regra rígida, é {} para um bloco que cabe numa linha e do/end para um que ocupa várias, como nos dois exemplos acima.

Blocos podem receber um valor

[10, 20, 30].each { |n| puts n * 2 }
# 20
# 40
# 60

O |n| entre pipes nomeia uma variável que o bloco recebe cada vez que roda. each chama o bloco uma vez por elemento e entrega esse elemento como n. É a versão de bloco da lista de parâmetros de um método, escrita entre pipes em vez de parênteses.

Por que isso importa: um conceito, em todo lugar

Blocos não são exclusivos de each; o times acima também usou um. O each_with_index deste curso e o map e o select dos próximos cursos se apoiam na mesma ideia: um método recebe um bloco e o roda, entregando o valor que faz sentido para aquele método. Aprender a ler { |n| ... } aqui rende em dezenas de métodos.

Pontos-chave

  • Um bloco é código passado para um método, escrito com {} ou do/end; os dois significam a mesma coisa.
  • Convenção: {} para um bloco de uma linha, do/end para um bloco de várias linhas.
  • |n| nomeia uma variável que o bloco recebe; o método que chama decide o que entregar e quantas vezes rodar o bloco.
  • Um método chamando o bloco que recebeu é o padrão por trás de each, times, map, select e da maioria dos métodos de iteração do Ruby.
Aula 1 de 7 · grátis

Continue com a aula 2

Iterando arrays com each

Mostra como o each roda o bloco por elemento, devolve o array original e permite acumular fora do bloco.

Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.

Digite para buscar...