====== 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}}//