Carregando...

Expressões Lambda

Expressões Lambda em C# representam uma forma concisa de declarar funções anônimas, permitindo que desenvolvedores escrevam código mais legível, eficiente e funcional. Elas são essenciais para manipulação de coleções, filtragem de dados, programação assíncrona e implementação de padrões de projeto orientados a eventos. Em C#, uma expressão lambda pode substituir métodos tradicionais quando se deseja criar lógica inline, sem a necessidade de definir métodos separados, facilitando manutenção e testes.
Você deve usar expressões lambda sempre que precisar de funções curtas, especialmente em operações com LINQ, delegates ou eventos. Elas se integram profundamente aos conceitos de C#, incluindo sintaxe moderna, estruturas de dados como listas e dicionários, algoritmos de ordenação ou filtragem e princípios de orientação a objetos. Ao dominar expressões lambda, o desenvolvedor consegue escrever código mais conciso, aplicar lógica funcional em coleções, implementar callbacks eficientes e otimizar performance de aplicações complexas.
Neste tutorial, o leitor aprenderá a construir expressões lambda básicas e avançadas, integrar lambdas com LINQ, aplicar boas práticas de C# para evitar problemas comuns como vazamentos de memória, exceções não tratadas ou algoritmos ineficientes, e utilizar lambdas em contexto de arquitetura de software. O foco será no uso prático dentro de projetos C# reais, conectando a teoria à resolução de problemas de desenvolvimento e design de sistemas.

Exemplo Básico

text
TEXT Code
using System;
using System.Collections.Generic;
using System.Linq;

namespace LambdaDemo
{
class Program
{
static void Main(string\[] args)
{
List<int> numeros = new List<int> { 1, 2, 3, 4, 5, 6 };

// Expressão Lambda para filtrar números pares
var pares = numeros.Where(n => n % 2 == 0).ToList();

Console.WriteLine("Números pares:");
pares.ForEach(p => Console.WriteLine(p));
}
}

}

No código acima, começamos criando uma lista de números inteiros. A expressão lambda 'n => n % 2 == 0' é passada para o método LINQ 'Where', que filtra apenas os números pares. Essa sintaxe demonstra como uma função anônima pode ser definida inline, eliminando a necessidade de métodos separados.
O método 'ForEach' também utiliza uma expressão lambda 'p => Console.WriteLine(p)', mostrando que lambdas podem ser aplicadas tanto para filtragem quanto para iteração. O operador '=>' separa os parâmetros da lógica da função, sendo uma característica central das expressões lambda em C#.
Além disso, esse exemplo evidencia boas práticas: usamos tipos fortemente tipados, evitamos variáveis globais, tratamos a lista de forma imutável (criando uma nova lista com ToList()), e seguimos convenções de nomenclatura do C#. Essas técnicas garantem código mais legível, seguro e eficiente, e são aplicáveis em projetos de qualquer escala, desde scripts simples até sistemas corporativos complexos.

Exemplo Prático

text
TEXT Code
using System;
using System.Collections.Generic;
using System.Linq;

namespace LambdaAdvancedDemo
{
class Produto
{
public string Nome { get; set; }
public decimal Preco { get; set; }
public int Estoque { get; set; }
}

class Program
{
static void Main(string[] args)
{
List<Produto> produtos = new List<Produto>
{
new Produto { Nome = "Teclado", Preco = 120m, Estoque = 10 },
new Produto { Nome = "Mouse", Preco = 80m, Estoque = 0 },
new Produto { Nome = "Monitor", Preco = 900m, Estoque = 5 },
new Produto { Nome = "Cabo USB", Preco = 15m, Estoque = 50 }
};

// Filtrar produtos disponíveis e com preço acima de 50 usando lambda
var produtosFiltrados = produtos
.Where(p => p.Estoque > 0 && p.Preco > 50)
.OrderByDescending(p => p.Preco)
.ToList();

Console.WriteLine("Produtos disponíveis e com preço acima de 50:");
produtosFiltrados.ForEach(p => Console.WriteLine($"{p.Nome} - R${p.Preco}"));
}
}

}

Neste exemplo avançado, criamos uma classe 'Produto' com propriedades Nome, Preço e Estoque, demonstrando como expressões lambda interagem com objetos e algoritmos mais complexos. A lambda 'p => p.Estoque > 0 && p.Preco > 50' filtra produtos disponíveis com preço superior a 50, enquanto 'OrderByDescending(p => p.Preco)' aplica ordenação decrescente com base no preço.
O código ilustra princípios de orientação a objetos, uso de coleções e algoritmos de filtragem/ordenamento com LINQ. O uso de expressões lambda permite combinar várias operações em uma única cadeia fluida de métodos, mantendo legibilidade e eficiência. Além disso, aplicamos boas práticas de C#: tratamento de listas com ToList(), uso de tipos fortemente tipados, evitando exceções comuns e promovendo otimização de performance.
Essa abordagem é diretamente aplicável em projetos C#, desde sistemas de gerenciamento de estoque até dashboards dinâmicos e APIs RESTful, permitindo que funções anônimas simplifiquem lógica repetitiva, reduzam código boilerplate e aumentem a manutenção do sistema.

C# best practices e armadilhas comuns:
Ao trabalhar com expressões lambda em C#, é crucial manter algumas boas práticas em mente. Sempre defina lambdas curtas e legíveis; lambdas longas ou complexas devem ser transformadas em métodos separados para melhor manutenção. Evite capturas desnecessárias de variáveis externas, pois podem causar vazamento de memória ou complicar o gerenciamento de recursos.
Evite também exceções não tratadas dentro de lambdas. Sempre valide dados antes de aplicar operações e, quando possível, use try-catch em métodos que utilizam lambdas críticas. Em termos de performance, prefira LINQ quando a legibilidade é prioridade, mas lembre-se que loops tradicionais podem ser mais rápidos em cenários de alta performance.
Além disso, seja consistente com convenções de nomenclatura, use tipos fortemente tipados, evite variáveis globais e mantenha coleções imutáveis sempre que possível. Lambdas podem ser combinadas com delegates, eventos e tarefas assíncronas, mas é fundamental entender o contexto de execução para evitar deadlocks ou inconsistências de dados.

📊 Tabela de Referência

C# Element/Concept Description Usage Example
Expressão Lambda Função anônima concisa n => n % 2 == 0
LINQ com Lambda Filtragem, ordenação e projeção de dados numeros.Where(n => n > 10).ToList()
Delegate Tipo seguro de função Func\<int, bool> filtro = n => n % 2 == 0;
ForEach com Lambda Iteração simplificada de coleções lista.ForEach(item => Console.WriteLine(item))
Captura de Variáveis Acesso a variáveis externas int x = 5; Func\<int,int> addX = n => n + x;
Chaining LINQ Combinação de operações produtos.Where(p => p.Preco > 50).OrderBy(p => p.Nome).ToList()

Resumo e próximos passos em C#:
Aprender expressões lambda em C# permite escrever código mais conciso, legível e funcional, integrando-se perfeitamente com LINQ, delegates e eventos. Com as técnicas apresentadas, o desenvolvedor pode aplicar filtragem, ordenação e operações complexas em coleções, respeitando princípios de orientação a objetos e boas práticas de C#.
O próximo passo é explorar lambdas em contextos avançados, como programação assíncrona com Tasks, eventos personalizados, e otimização de algoritmos em sistemas de larga escala. Recomenda-se também estudar padrões de projeto que utilizam funções anônimas, como Strategy, Command e Observer.
Para continuar aprendendo, utilize documentação oficial do .NET, exemplos de projetos no GitHub e exercícios práticos com LINQ e coleções complexas. Aplicar lambdas regularmente em projetos reais solidifica a compreensão e garante manutenção eficiente do código em sistemas corporativos ou aplicativos críticos.

🧠 Teste Seu Conhecimento

Pronto para Começar

Test Your Knowledge

Test your understanding of this topic with practical questions.

3
Perguntas
🎯
70%
Para Passar
♾️
Tempo
🔄
Tentativas

📝 Instruções

  • Leia cada pergunta cuidadosamente
  • Selecione a melhor resposta para cada pergunta
  • Você pode refazer o quiz quantas vezes quiser
  • Seu progresso será mostrado no topo