Blocos Ruby (do..end)
O curso explica como métodos Ruby recebem e rodam blocos. Começa pelo yield, que roda o bloco passado a um método, e mostra como ele entrega valores e devolve o resultado do bloco. Trata do block_given? para blocos opcionais e do LocalJumpError que aparece quando nenhum bloco é passado. Mostra como &block captura o bloco como um Proc e o repassa a outro método. As aulas refazem each, map e select, dão uma olhada breve em Proc e lambda e terminam com um pequeno desafio.
O que você vai aprender
- ✓Como o yield roda o bloco que um método recebeu
- ✓Passar valores ao bloco com yield e usar o valor que ele devolve
- ✓Tornar um bloco opcional com block_given?
- ✓Capturar um bloco com &block e repassá-lo a outro método
- ✓Refazer each, map e select com um loop, yield e um acumulador
- ✓Reconhecer Proc e lambda e como diferem no número de argumentos
yield: rodando o bloco que um método recebeu
Os três últimos cursos usaram each, map e select o tempo todo, métodos que recebem um bloco e o rodam. Nenhum mostrou como um método faz isso. A resposta é yield.
Ler a aula completa grátis →Currículo
7 aulasyield: rodando o bloco que um método recebeu
Mostra como o yield roda o bloco do método naquele ponto e como each, map e times dependem dele.
yield com argumentos
Passa valores ao bloco com yield, refaz o núcleo do each e usa o valor que o bloco devolve.
block_given? e blocos opcionais
Explica o LocalJumpError do yield sem bloco e usa block_given? para tornar o bloco opcional.
Capturando um bloco com &
Captura o bloco como um Proc com nome usando &block, roda com call e o repassa adiante.
Reimplementando map e select
Escreve my_map e my_select com each, yield e um acumulador, mostrando a estrutura que compartilham.
Proc e lambda: uma olhada breve
Cria objetos Proc e lambdas diretamente e mostra que o lambda exige o número certo de argumentos.
Juntando tudo: um pequeno desafio
Junta block_given?, yield e um acumulador num método build_list e depois pede que você o escreva.