Uživatelské nástroje

Nástroje pro tento web


it:sw:lambda_expressions

Lambda výrazy v C#

Lambda výraz je krátký zápis anonymní metody. Používá se všude tam, kde potřebujeme předat kus logiky jako parametr jiné metodě, aniž bychom museli definovat celou pojmenovanou funkci.

1. Syntaxe lambda výrazu

Základní syntaxe používá operátor deklarace lambdy `⇒`, který se čte jako „přechází na“ nebo „stává se“.

  • (parametry) ⇒ výraz / blok kódu

Příklady zápisu:

// Bez parametrů
() => Console.WriteLine("Ahoj!");

// Jeden parametr (závorky lze vynechat)
x => x * x;

// Více parametrů
(x, y) => x + y;

// S explicitním typem (pokud ho kompilátor nedokáže odvodit)
(int x, string s) => s.Length > x;

2. Lambda a delegáty

Lambda výrazy jsou nejčastěji přiřazovány do předdefinovaných delegátů v .NET:

  • Action: Pro metody, které nevracejí žádnou hodnotu (void).
  • Func: Pro metody, které vracejí hodnotu. Poslední typ v definici je vždy návratový typ.
  • Predicate: Speciální případ pro metody vracející `bool`.
// Func<vstup, návratový_typ>
Func<int, int> zdvojnasob = x => x * 2;
int vysledek = zdvojnasob(5); // 10

// Action<vstup>
Action<string> vypis = s => Console.WriteLine(s);
vypis("Lambda v akci");

3. Využití v LINQ

Právě díky lambda výrazům je LINQ tak mocný a čitelný. Umožňují definovat podmínky filtrace nebo transformace přímo v metodě.

var cisla = new List<int> { 1, 2, 3, 4, 5, 6 };

// Lambda určuje podmínku (x musí být sudé)
var sude = cisla.Where(x => x % 2 == 0).ToList();

4. Uzávěry (Closures)

Lambda výraz má schopnost přistupovat k proměnným, které jsou definovány vně jejího vlastního těla (v okolním rozsahu platnosti).

int bonus = 10;
Func<int, int> pripoctiBonus = x => x + bonus;

Console.WriteLine(pripoctiBonus(5)); // Vypíše 15

5. Proč používat lambdy?

Výhoda Popis
Stručnost Redukuje množství „balastního“ kódu (boilreplate).
Čitelnost Logika je definována přesně tam, kde se používá.
Flexibilita Umožňuje snadné vytváření funkcí vyšších řádů.

Související články:

Tagy: programming dot-net csharp lambda-expressions functional-programming

it/sw/lambda_expressions.txt · Poslední úprava: autor: admin