O que esperar do próximo iPhone
A TI deve confiar nos dispositivos móveis?
Plantronics cria comunidade de desenvolvedores
Guia de salários: gerentes de bancos de dados recebem até R$ 8,7 mil
Microsoft: Windows 8 chegará no final deste ano
Ah, Facebook, por que não consigo lhe largar?
4G Americas: saiba o que as operadoras devem fazer para atender demanda por dados
ATUALIZADA - Brasil: veja a lista de dispositivos que serão atualizados para Android 4.0
EMC lança mais de 40 produtos entre hardwares e softwares
Forrester: preparem-se para a segunda onde de aplicativos móveis
ATUALIZADA - Fique por dentro da compra da Motorola Mobility pelo Google
Windows Phone 7: usuários não poderão baixar apps do Marketplace

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, Fernando Hamasaki de Amorim atua em projetos utilizando Ruby e Rails. Pós-graduado em Tecnologias Web Fiap, trabalha desde 2000 com desenvolvimento web, onde já desenvolveu em várias plataformas e linguagens, como .NET, Java, JavaScript, PHP e ASP. Também foi palestrante do FISL e da RubyConf Brasil. Neste espaço, abordará temas envolvendo o desenvolvimento por meio da linguagem Ruby.
Conscientização e Dicas de Segurança da Informação
Anderson Santana
Artigo: Proteção de Dados
Dirty & Ugly Web
Paulino Michelazzo
Caiu na rede
Internet Upgrade
Victor Maeda
Ataques DDos aos bancos brasileiros.
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