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...