Skip to content

Lambda Expression e Statement

Podemos pegar um vetor (array) e ir somando um a um dos valores dentro dele dentro de um laço For para ir andando em cada valor em cada posição e ir salvando em uma variável auxiliar, como no exemplo abaixo:

using System;
class Program
{
static void Main()
{
var numbers = new int[] { 1, 2 , 3, 4, 5 };
var sum = 0;
for (var n = 0; n < numbers.Length; n++)
{
sum += numbers[n];
}
Console.WriteLine(sum);
}
}

O retorno desse cálculo é 15 onde ele vai atualizando o valor da variável sum até o final do tamanho do vetor numbers.

Podemos fazer o mesmo cálculo sem necessitar utilizar a estrutura do For, melhorando a performance do projeto.

Para utilizarmos lambda no código devemos utilizar o simbolo => que utiliza as variáveis chamadas para controlar o fluxo do processamento

using System;
class Program
{
static void Main()
{
var numbers = new int[] { 1, 2, 3, 4, 5 };
var sum = numbers.Aggregate(0, (total, num) => total + num);
Console.WriteLine(sum);
}
}

Nesse código utilizamos o método da extensão LINQ para utiliza uma função acumuladora sobre uma sequência, ou seja, ele vai pegar da posição inicial e utilizar uma função lambda para interagir com os próximos valores.

O método Aggregate pertence a classe System.Linq.Enumerable e é uma operação de redução que utiliza uma função acumuladora sobre uma sequencia de valores, produzindo um único valor.

Foi criado internamente a variável total que vai sendo atualizada a cada interação dentro do lambda e a variável num que vai pegando o próximo valor do vetor começando na posição 0 definida no incio.

É a mesma ideia do Lambda Expression, mas nesse caso abrimos uma nova área para colocarmos mais métodos e outros processos de forma organizada, como no seguinte exemplo:

using System;
class Program
{
static void Main()
{
var numbers = new int[] { 1, 2, 3, 4, 5 };
var sum = numbers.Aggregate(0, (total, sum) => {
Console.WriteLine("total = {0}, num = {1}", total, num);
return total + num;
});
}
}

Nessa estrutura estamos fazendo o mesmo que no C# lambda expression, mas podemos interagir com as variáveis criada para fazermos validações ou definir o que quisermos, mas devemos sempre no final fazer um return dos valores desejados, diferente de fazer em uma linha, dessa forma podemos ter mais controle do que queremos fazer no processo de leitura.