Atenção: esse artigo tem uma palestra complementar. Clique e assista!

Atenção: esse artigo tem um vídeo complementar. Clique e assista!

Do que trata o artigo

O artigo irá mostrar as expressões Lambda que foram incorporadas ao framework .NET a partir da versão 3.5. Vamos estudar as principais formas de se construir este tipo de expressão e também alguns exemplos integrando-os com a linguagem LINQ.


Para que serve

As expressões Lambda são uma forma de se escrever métodos anônimos de forma mais clara e resumida. Com este tipo de codificação, o código final fica menos carregado e, a partir do momento em que o desenvolvedor se acostuma com o recurso, mais fácil de ser compreendido, embora, numa primeira visão, possa parecer um pouco estranho.


Em que situação o tema é útil

Sempre que se estiver usando métodos anônimos para se executar consultas em coleções de objetos, por exemplo, o uso do recurso de expressões Lambda torna o código mais resumido e direto. Também é interessante quando se deseja padronizar o código e remover elementos que possam causar uma certa “poluição” no mesmo. Pense em uma consulta de dados que precisa aplicar algum tipo de modificação antes de exibir os mesmos baseando em opções escolhidas pelo usuário. No exemplo prático que será dado, veremos como fazer isto.

Resumo do DevMan

Os métodos anônimos facilitam as pesquisas de dados em coleções genéricas de objetos ou qualquer valor que possa ser listado. Conforme aumenta a complexidade dos dados que se está pesquisando, o código vai ficando carregado com várias linhas e muitos elementos. As expressões Lambda procuram dar uma simplificada na forma como se usa os métodos anônimos. Em vez de escrever um bloco de códigos é possível escrever uma expressão que em uma única linha possa resolver um determinado problema de consulta de dados, por exemplo. A primeira vista um código escrito com expressões Lambda é um pouco estranho porque é bem resumido, entretanto, conforme você vai aprendendo e se acostumando, começa a fazer muito sentido e em pouco tempo começamos a encontrar várias aplicações para este recurso. Neste artigo vamos expor primeiramente as bases de métodos anônimos. Em seguida, teremos contato com os principais elementos de um código usando as expressões Lambda. Concluindo o estudo teórico, colocaremos estas expressões dentro de sua “casa”, que são as consultas com LINQ. Após isto, aplicaremos os conceitos em um projeto Windows que fará uso destas expressões.

A inclusão de listas genéricas (System.Collections.Generic) no framework .NET possibilitou várias melhorias para manipulação de objetos na memória e abriu um vasto leque de possibilidades de consultas nestes objetos através dos métodos que existem na classe List<T>.

Antes, se o programador precisasse de uma lista dinâmica de dados na memória, precisaria usar o tipo Object para montar a lista, escrever seus próprios métodos de pesquisa e ainda ficar sujeito ao risco de problemas ao converter os objetos para o tipo de dado correto a ser usado.

Um aspecto negativo é que, para poder fazer isto, o programador poderia penalizar o desempenho do programa através de boxing e unboxing, que é como se chama a conversão de um tipo específico para o tipo “Object” e vice-versa. Com as listas genéricas tornou-se possível criar coleções de objetos fortemente tipadas na memória com todos os pontos positivos que este recurso traz.

Outro recurso do C#, os delegates, no qual se cria uma espécie de ponteiro para um método, marcou vários avanços e definiu alguns rumos da plataforma. Os delegates permitem que o método a ser executado seja definido dinamicamente. Em algumas situações isto pode ser realmente muito necessário.

Avançando e melhorando continuamente, entram os métodos anônimos na linguagem C#. Estes permitiram que o código a ser executado pudesse ser passado diretamente para o delegate sem precisar que se crie um método. Vieram então os vários métodos de pesquisa para as listas genéricas que podem receber métodos anônimos para fazer seu trabalho.

Mas, como tudo tende a se aperfeiçoar e sempre existe alguém querendo fazer mais com menos, surgiram as expressões Lambda – ou, se preferir, o termo em inglês: “Lambda Expressions” – que permitiram escrever em apenas uma linha uma expressão para resolver uma pesquisa.

Nota do DevMan

Expressões Lambda são muito mais do que pesquisa de objetos na memória, mas, para que você possa compreender mais facilmente, vamos restringir o assunto apenas para o aspecto das consultas. Até mesmo porque é interessante observar que as expressões Lambda na plataforma .NET surgiram basicamente para este fim.

Para poder entender os assuntos que serão tratados é muito importante que você tenha conhecimento dos pontos a seguir:

· Fundamentos da linguagem C#, principalmente da versão 3.5 em diante;

· Criação de aplicações Windows Forms com o Visual Studio;

· Programação orientada a objetos;

· Uso de bancos de dados dentro do Visual Studio;

· LINQ to Entities.

Você precisará ter instalado em seu computador:

· Microsoft Visual Studio 2008 ou 2010 (para os exemplos apresentados ao longo do artigo as versões Express podem ser utilizadas);

· Microsoft SQL Server 2008;

· Northwind - banco de dados de exemplo da Microsoft.

Confira no final do artigo os links para download destes programas.

Delegates

Comentamos na introdução que delegates são ponteiros para métodos dentro de uma classe. Cabe aqui uma consideração um pouco mais detalhada porque, na verdade, ponteiros não são uma coisa comum em C#, pois seu uso não lembra nem um pouco linguagens como C/C++ ou Pascal.

Delegates são objetos especiais que recebem uma referência para um método. São usados principalmente se precisarmos definir dinamicamente qual método será executado. Não existe necessidade de usar um delegate se o método a ser executado vai ser sempre o mesmo. Para criar delegates você precisa criar uma instância da classe delegate que define a assinatura do método a ser passado. Confira um exemplo da ...

Quer ler esse conteúdo completo? Tenha acesso completo