Lambda Expressions

by Fabiano 10. agosto 2008 01:05

 

Expressão lambda foi adicionada ao Visual Basic 2008 e C# 3.0, com o objetivo de apoiar ”Language Integrated Queries “(LINQ) .Quanto mais  você utilizar a Expressão lambda, mais você verá sua potência e flexibilidade.

A lambda é uma grande inovação da linguagem, mas para você que está iniciando agora como desenvolvedor ou tem pouco tempo com a linguagem pode parecer bem complicado. Não desanime, pois quando você começar a conhecer mais sobre lambda irá entender o quanto ela pode ser útil para o seu dia a dia.

Métodos Anônimos

Não poderia falar sobre expressão lambda sem falar de método anônimos que é  uma  das evoluções existentes no framework 2.0 lançado no final de 2005. Eles  podem ser usados para passar um bloco de código para um delegate, de acordo com o parâmetro do delegate,  também  podem  ser utilizados em lugares onde a criação de um método não é realmente necessária.Vejamos abaixo dois exemplos, um utilizando delegate e outro utilizando métodos anônimos

class ShowClassDelegate

{

     delegate void MeuDelegate();

     public void EiMetodo()

     {

         MeuDelegate del = new MeuDelegate(ImprimeMensagem);

         del();

     }

     void ImprimeMensagem()

     {

         Console.WriteLine("E ai!!");

     }

}

Veja como fica com Métodos Anônimos

class ShowClassComAnonimos

{

    delegate void MeuDelegate();

    public void EiMetodo()

    {

       MeuDelegate delAnonimo = delegate()

       {

           Console.WriteLine("E ai!!");

       };

       delAnonimo();

    }

 }

Note que não precisamos escrever o método ImprimeMensagem, fazemos diretamente.

No entanto, métodos anônimos tem uma desvantagem no que diz respeito à legibilidade. Ele modifica a escrita e o código, por vezes se torna realmente difícil de ler.

Então, se tivermos realmente que fazer alguma coisa que seja fácil de ler, e também simples de usar, é aí que as expressões lambda trabalham a nosso favor
.
Por isso muitos dizem que as Expressão lambda são uma evolução natural dos  Métodos Anônimos.

Expressão lambda?

O C# 2.0 introduziu o conceito de métodos anônimos, que permitem que blocos de código sejam escritos "em linha" onde delegamos os valores esperados. Assim podemos escrever códigos mais inteligentes e com um menor número de linhas.

As expressões lambda  são muito utilizadas quando escrevemos métodos anônimos
, elas nos permitem trabalhar de uma forma mais inteligente e lógica. Eles também se tornam muito úteis quando escrevemos expressões LINQ para pesquisa e também podem ser utilizadas em funções, como anteriormente já comentadas conseguimos escrever funções muito mais enxutas.

 

 

Criamos uma Lambda desta forma  (parametro  { =>} o que teremos de retorno), onde o  “=>” e o operador e o que vem a antes dele é o parâmetro e após, o retorno.

Vamos dizer que queremos uma função que irá receber um  inteiro, e irá retornar se o inteiro é superior a  10.

private bool Emaiorq10(int i)

{

    if (i > 10)

        return true;

     else

        return false;

}

A mesma função pode ser escrita como uma expressão lambda, em uma linha.

(int i => i > 10);

A Expressão lambda faz o mesmo trabalho como a função acima. O mais interessante é que podemos escrever isso em apenas uma linha.

 

 

 

 

Agora vamos criar uma classe para que possamos exemplificar melhor a Expressão lambda, como disse anteriormente ela é muito utilizada em consultas LINQ  que é o que veremos a seguir:

 

public class Carros

{

   public string Marca { get; set; }

   public string Modelo { get; set; }

   public int Ano { get; set; }

 

}

 

Agora vou construir e popular minha Classe de Carros.

 

List<Carro> Carros = new List<Carro>

{ new Carro { Modelo = "Astra", Marca="Chevrolet", Ano=2005},

  new Carro { Modelo = "Corsa", Marca="Chevrolet", Ano=2004},

  new Carro { Modelo = "Stilo", Marca="FIAT", Ano=2008},

  new Carro { Modelo = "Doblo", Marca="FIAT", Ano=2006},

  new Carro { Modelo = "Escort", Marca= "Ford", Ano=2000},

  new Carro { Modelo = "Explorer", Marca="Ford", Ano=2007}

};

 

PS:Se você ainda não está familiarizado com o C# 3.0 deve estar estranhando a criação das propriedades com os gets e sets direto e também a da Lista de carros populando direto no construtor sem antes ter criado um construtor para fazer isso. Pois bem, “seja bem-vindo”, essas são apenas duas de muitas novidades da linguagem, mas isto é assunto para o próximo artigo.

Eu mostrei como criar e instanciar um List<Carro> já passando os valores, agora vou utilizar alguns métodos chamados métodos estendidos  no namespace LINQ  onde podemos fazer consultas em coleções.

 

var Resultado = Carros.Where(p => p.Marca == "FIAT");

var Resultado1 = Carros.Average(p => p.Ano);

 

Note que o (p =>) é Expressão lambda, que no primeiro exemplo especifica um filtro para a Marca “FIAT” em seguida  utilizamos uma lambda a partir do Objeto Carro para calcular a média.  A partir daí podemos explorar vários exemplos de utilização.

var Resultado2 = Carros.Where(p => p.Ano > 2005);

var Resultado3 = Carros.Where(p => p.Modelo.Contains("o"))

                                    .OrderBy(o => o.Ano);

 

Pra finalizar, um filtro utilizando o Contains que funciona como o Like do SQL e um OrderBy para ordenar o resultado pelo ano.

Bem pessoal espero ter passado o conceito básico da Expressão lambda, agora é só você se aprofundar  e colocar em prática mais uma das novidades do C# e Visual Basic .NET 9.

Bons Códigos...

 

 

Tags: ,

.Net

Comentários

11/8/2009 06:09:03 #

cash loans

Please, can you PM me and tell me few more thinks about this, I am really fan of your blog...gets solved properly asap.

cash loans | Reply

11/8/2009 06:09:08 #

cash loans

That�s Too nice, when it comes in india hope it can make a Rocking place for youngster.. hope that come true.

cash loans | Reply

25/8/2009 16:27:33 #

bad credit loans

my God, i thought you were going to chip in with some critical insight at the end there, not leave it with �we leave it to you to decide�.

bad credit loans | Reply

28/8/2009 00:27:14 #

bad credit loans

good good�this post deserves nothing Frown  �hahaha just joking Tong �nice post Tong

bad credit loans | Reply

17/9/2009 02:22:04 #

payday loan

Hi, I can�t understand how to add your site in my rss reader. Can you Help me, please Smile

payday loan | Reply

17/9/2009 02:22:11 #

payday loan

good good�this post deserves nothing Frown  �hahaha just joking Tong �nice post Tong

payday loan | Reply

Comentar




biuquote
  • Comentário
  • Pré-visualização
Loading



Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen

Fabiano Belmonte

Senior Architect, especialista em aplicações e-business com larga experiência em B2B (Submarino. Com e Saraiva.Com). Trabalha há 5 anos com a tecnologia .Net, aplicando conhecimentos nas diversas áreas: instituições financeiras (sistema SPB), e-commerce, gerenciamento logístico entre outras.