Novo OS 2.0 traz email integrado e aplicativos Android para o PlayBook
Boatos: Microsoft pode ter Office para iPad
Guia de salários: carreira em e-commerce pode pagar até R$ 16 mil
Google ignora controles de privacidade do IE, diz Microsoft
iPad 3 terá SoC Apple A5X
Lista de falhas: iPad 2 é mais seguro que Kindle Fire
Fundador do Megaupload é solto pela justiça
Anonymous: conheça os 10 principais fatos do grupo
Anônimos, trolls e fakes: dicas de etiqueta para lidar na internet
Especial Carreiras em TI: entenda o que faz um arquiteto de solução
Solução capta e reporta falhas em softwares
Guia de salários: profissionais de help desk ganham até R$ 16,7 mil

Blocos não são objetos e não podem ser manipulados como objetos em Ruby. Procs e lambdas tornam possível criar um objeto que represente um bloco.
Apesar de ambos serem instâncias da classe Proc, o comportamento dos procs é muito parecido com blocos e o comportamento dos lambdas é parecido com métodos.
Vamos ver como criá-los e utilizá-los.
A maneira “normal” de se criar um proc é através do construtor da classe Proc. Chamando o método new, passando um bloco associado, será retornado um proc que representa o bloco.
Outra forma de se criar um proc é recebendo um bloco como parâmetro de um método. Para fazer isso é que o nome do parâmetro que vai receber o bloco seja prefixado com “&” (ampersand ou ê comercial).
O jeito mais comum de se criar um lambda é através do método lambda, que pertence ao módulo Kernel e por isso se comporta com um método global.
Na versão 1.8 do Ruby, o método global proc é um álias (sinônimo) para o método lambda. Já no Ruby 1.9, o método proc passou a ser um álias para Proc.new, retornando assim um proc e não mais um lambda como na versão 1.8.
A versão 1.9 do Ruby traz uma nova sintaxe para se criar lambdas. O que antes poderia somente ser declarado assim:
Agora pode ser feito assim:
Uma vantagem desse novo tipo de declaração do lambda no Ruby 1.9 é a possibilidade de informar valores padrão para os parâmetros:
Da mesma forma que nas chamdas de métodos, os parênteses podem ser omitidos:
Mesmo que procs e lambdas tenham um código de bloco associado, eles não podem ser executados diretamente como fazemos com métodos. Procs e lambdas são objetos e não métodos, então é possível chamar um método do objeto.
Para executar um proc/lambda temos o método call da classe Proc:
O método call executa o código do bloco original que foi passado na criação do proc/lambda. Os parâmetros passados para o método call são repassados para o bloco original e o retorno do bloco será retornado pelo método call.
Outra maneira de invocar um proc/lambda é através de um array que recebe os parâmetros como seus elementos:
Na minha opinião isso é meio que uma gambiarra do Ruby para ter uma sintaxe parecida com uma chamada de método, “trocando” os parênteses por colchetes.
No Ruby 1.9 foi criada uma sintaxe adicional para invocar um proc/lambda:
.() é uma Syntatic Sugar que invoca o método call.
No próximo post veremos as diferenças entre procs e lambdas.
Referências:
Desenvolvedor sênior na Locaweb, empresa na qual está desde 2007, Fernando Hamasaki de Amorim trabalha desde a criação até a arquitetura, modelagem, análise e integração de sistemas e aplicativos na companhia. Graduado em Tecnologia em Informática pela UniSant'Anna, o profissional possui pós-graduação em Tecnologias Web com Ênfase em Java pela Fiap. Já atuou em diversas outras companhias, tais como a TV Online, empresa brasileira pioneira em transmissões ao vivo e SAC Sistemas, que desenvolve ERP. Neste espaço, abordará temas envolvendo o desenvolvimento por meio da linguagem Ruby.
Inovação, tecnologia e futurismo
Bráulio Medina
SIRI, MAJEL, EVI - Colhemos os frutos da semântica e inteligência artificial
Mundo RIA
Zaedy Sayão
Construindo Mobile Apps com Sencha Touch e Phonegap - Parte 1
Conversando sobre Tecnologia
Anderson Rocha
Transpondo Fronteiras da Multidisciplinaridade para Lidar Com Falsificações de Imagens e Vídeos no Século XXI*
Mídias Sociais e Negócios - Direto do Vale do Silício
Marcio Saito
7 Ações em Mídia Social para quem tem mais o que fazer
Expedição WDC: o diário do sinal de internet no Brasil
Expedição WDC
Pegue uma carona na Expedição WDC/Abranet