====== 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
Func zdvojnasob = x => x * 2;
int vysledek = zdvojnasob(5); // 10
// Action
Action vypis = s => Console.WriteLine(s);
vypis("Lambda v akci");
---
===== 3. Využití v LINQ =====
Právě díky lambda výrazům je [[it:sw:linq|LINQ]] tak mocný a čitelný. Umožňují definovat podmínky filtrace nebo transformace přímo v metodě.
var cisla = new List { 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 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://
* [[it:sw:linq|LINQ: Dotazování v C#]]
* [[it:sw:csharp|Jazyk C# a jeho vlastnosti]]
* [[it:sw:delegates|Delegáty a události]]
//Tagy: {{tag>programming dot-net csharp lambda-expressions functional-programming}}//