Procs
Objetos de bloco reutilizáveis.
Procs é uma aula grátis de Ruby Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Ruby Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Ruby Academy inclui 4 aulas no total.
Objetos de bloco reutilizáveis
Um bloco não é um objeto por si só, portanto você não pode armazená-lo em uma variável. Um Proc envolve um bloco em um objeto real que você pode salvar, passar adiante e chamar mais tarde.
greeter = Proc.new { puts "Hello!" }
greeter.call
greeter.callCriando Procs
Há duas formas comuns de criar um Proc: Proc.new { ... } e o método mais curto proc { ... } do Kernel. Ambos produzem o mesmo tipo de objeto.
double = proc { |x| x * 2 }
p double.call(5)Chamando um Proc
Você pode invocar um Proc de várias formas: .call, .() e a forma abreviada com colchetes [ ]. Elas são equivalentes.
square = proc { |x| x * x }
puts square.call(4)
puts square.(4)
puts square[4]Procs aceitam argumentos
Os Procs aceitam parâmetros assim como os blocos, declarados entre as barras verticais.
add = proc { |a, b| a + b }
puts add.call(3, 7)Armazenando Procs em matrizes
Como os Procs são objetos, você pode manter uma coleção de comportamentos e executá-los em sequência.
ops = [proc { |x| x + 1 }, proc { |x| x * 2 }]
result = 5
ops.each { |op| result = op.call(result) }
puts resultPassando um Proc como bloco
Adicione o prefixo & a um Proc para passá-lo a um método que espera um bloco. O Ruby o converte novamente para o formato de bloco.
printer = proc { |n| puts "Item: #{n}" }
[1, 2, 3].each(&printer)Capturando blocos como Procs
O inverso também funciona: &block na assinatura de um método captura o bloco fornecido como um Proc que você pode armazenar.
def make_handler(&block)
block
end
h = make_handler { |msg| puts "Got: #{msg}" }
h.call("ping")Procs são flexíveis quanto à aridade
Uma característica importante: os Procs não reclamam quando a quantidade de argumentos está incorreta. Os argumentos ausentes se tornam nil e os adicionais são ignorados.
p1 = proc { |a, b| puts "a=#{a.inspect} b=#{b.inspect}" }
p1.call(1)
p1.call(1, 2, 3)Procs e retorno
Um return dentro de um Proc retorna do método que o envolve, não apenas do Proc. Isso pode surpreendê-lo, portanto tenha cuidado.
def demo
p = proc { return 10 }
p.call
20 # never reached
end
puts demoProcs capturam o ambiente ao redor
Um Proc se lembra das variáveis no escopo em que foi definido. Isso faz dele um fechamento, um tópico que exploraremos mais adiante.
factor = 3
times_factor = proc { |n| n * factor }
puts times_factor.call(10)Juntando tudo
Os Procs transformam blocos em objetos de primeira classe:
- Crie-os com
proc { }ouProc.new. - Execute-os com
.call,.()ou[ ]. - Passe-os aos métodos com
&. - Eles são flexíveis quanto à aridade e usam o
returnno nível do método.
pipeline = [proc { |s| s.upcase }, proc { |s| s + "!" }]
text = "hello"
pipeline.each { |step| text = step.call(text) }
puts textVerificação rápida
Teste sua compreensão sobre Procs.
Recapitulação
Você aprendeu sobre Procs:
- Um Proc é um bloco envolvido em um objeto.
- Crie-o com
proc/Proc.new; execute-o com.call. - Passe-o aos métodos usando
&. - Eles toleram diferenças de aridade e usam o
returnno nível do método.
shout = proc { |word| puts word.upcase }
shout.call("ruby")Perguntas Frequentes
A aula “Procs” é grátis?
Sim — o texto completo de “Procs” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Ruby Academy, atualize para CoddyKit PRO. O curso de Ruby Academy inclui 4 aulas no total.
O que vou aprender em “Procs”?
Objetos de bloco reutilizáveis. Você pratica Ruby Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Ruby Academy?
Nenhuma experiência prévia é necessária. Ruby Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Procs”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Ruby Academy?
Sim. Cada aula de Ruby Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.