IT Mídia
Notícias em destaque

Diferenças entre procs e lambdas

28 de agosto de 2011 19:42

No último post falei sobre procs e lambdas. Agora vamos ver quais as diferenças entre eles.

Um proc se comporta como um bloco. Invocar um proc é semelhante a produzir um bloco. Já um lambda tem o comportamento de um método. Invocar um lambda é como invocar um método.

Retorno em procs e lambdas

Quando um return é chamado dentro de um bloco, não somente há o retorno do bloco, mas também o retorno do método onde está o bloco. O mesmo vale para os procs. Veja um exemplo:

Quando o return dentro do proc my_proc for chamado, também será o retorno do método some_method. Sendo assim, a última linha do método some_method não é executada. Mas se você declarar esse proc fora do método e passá-lo como parâmetro, ao chamar o método call do proc um erro do tipo LocalJumpError será lançado, pois o Ruby entende que está sendo chamado mais de um return para o método.

Com lambda o return somente irá retornar do lambda, continuando a execução normal do método onde o lambda foi invocado.

Mesmo declarando o lambda fora do escopo do método, a execução será normal e um LocalJumpError não acontecerá.

Passagem de parâmetros em proc e lambdas

Aqui há uma grande diferença entre procs e lambdas. Como dito anteriormente, lambdas se comportam como métodos. Então quando chamados, precisam receber a quantidade de parâmetros exata com o qual foram declarados. Caso contrário, um erro do tipo ArgumentNumberError ocorrerá.

Já os blocos se comportam de uma maneira mais flexível em relação aos seus parâmetros. Parâmetros que não forem passados recebem nil como valor e parâmetros adicionais serão descartados.

Para finalizar, uma dica: para descobrir a quantidade de parâmetros esperados em um proc ou lambda, use o método arity.

Referências:

TAGS: ruby

Sobre Fernando Hamasaki de Amorim

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.

Entre em contato com Fernando Hamasaki de Amorim

Parceiros

Portais: IT Mídia | IT Web | Saúde Web

Publicações: InformationWeek Brasil | CRN Brasil | FH

Fóruns: IT Forum | IT Forum + | IT Business Forum | Saúde Business Forum