Publicado em

Lambda em C#

Partilhar:

Introdução

As expressões lambda tornaram-se uma ferramenta indispensável para os programadores C#. Elas proporcionam uma escrita concisa, flexibilidade e a capacidade de criar funções on-the-fly.

Origens das Expressões Lambda

Originando-se do cálculo lambda, uma estrutura formal na teoria da computação, as funções lambda são agora um pilar em várias linguagens de programação modernas. C# incorporou essa funcionalidade, permitindo que os programadores aproveitassem os benefícios das funções anónimas.

Sintaxe do Lambda em C#

A expressão lambda em C# utiliza o operador =>. À esquerda deste operador, especificamos os parâmetros e à direita, a expressão ou o bloco de código.

(param1, param2) => param1 * param2;
using System;
using System.Linq;

namespace Base {
  class Lambda {
    private int[] numeros = new int[] {
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
    };

    public void Run() {
      Console.WriteLine($"Total de números pares: {numeros.Count(numero => numero % 2 == 0)}");
      Console.WriteLine($"Total de números ímpares: {numeros.Count(numero => numero % 2 != 0)}");
    }

    private int ContarNumerosPares() {
      var contador = 0;

      foreach (var numero in numeros) {
        if (numero % 2 == 0)
          contador++;
      }

      return contador;
    }

    private int ContarNumerosImpares() {
      var contador = 0;

      foreach (var numero in numeros) {
        if (numero % 2 != 0)
          contador++;
      }

      return contador;
    }
  }
}

Benefícios do Uso de Lambda em C#

  1. Concisão: Reduz a necessidade de escrever métodos completos, tornando o código mais limpo.
  2. Flexibilidade: Facilmente usadas como argumentos ou retornadas como valores.
  3. Leitura Facilitada: O código torna-se mais expressivo e legível.

Relação com Delegates, Func e Action

  • Delegates: São tipos de referência que podem referenciar qualquer método com o mesmo conjunto de parâmetros e retorno. As expressões lambda frequentemente se associam a delegates.
  • Func: É um delegate que pode ter zero ou mais parâmetros e retorna um valor. A última especificação de tipo é sempre o tipo de retorno.
  • Action: Semelhante ao Func, mas não retorna valor (void).

LINQ e Expressões Lambda

O LINQ (Language-Integrated Query) é um conjunto de extensões de métodos que permite a execução de consultas complexas em coleções. O LINQ usa expressões lambda extensivamente, tornando a consulta de dados em coleções, bancos de dados e XML muito mais simples e intuitiva.

var pares = numeros.Where(numero => numero % 2 == 0);

Casos de Uso Comuns

  • Manipulação de Coleções: Filtrar, ordenar, transformar coleções.
  • Eventos e Delegates: Substituir métodos anónimos por expressões lambda.
  • Asynchronous Programming: Usar expressões lambda com Task.Run() ou async e await.

Conclusão

A capacidade de usar expressões lambda em C# permite que os programadores escrevam código mais limpo, eficiente e expressivo. Ao entender sua origem, sintaxe e benefícios, pode-se realmente começar a tirar o máximo proveito desta poderosa característica.

Happy coding!