Využij akce až 30 % zdarma při nákupu e-learningu. Více informací. Zároveň je tento týden sleva až 80 % na e-learning týkající se C# .NET
Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
Avatar
Alesh
Překladatel
Avatar
Alesh:7.11.2020 22:28

Nevím, jak pořádně používat lambda výrazy.

Zkusil jsem: Narazil jsem na ně zatím víceméně jen v https://www.itnetwork.cz/…ambda-vyrazy , ale tam je to rovnou použito pro určité případy a chybí mi celkový popis, co je a co není možné apod.

Chci docílit: Chtěl bych si nastudovat kompletně lambda výrazy.

 
Odpovědět
7.11.2020 22:28
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Bugmaster
Člen
Avatar
Bugmaster:7.11.2020 23:57

Řekl bych, že na lambda výrazech není moc co studovat - ta syntaxe není komplikovaná.

Spíš je důležitý pochopit ten koncept: proměnná může obsahovat funkci

Nebo jinak: že si funkci můžeš předávat stejně jako jakoukoliv jinou hodnotu (třeba jako argument jiné funkce).

Lambda výraz je pak jen zkrácený zápis. Technicky vzato se obejdeš i bez ní.

using System;
using System.Collections.Generic;

namespace Lamda
{
  class Program
  {
    static void Main(string[] args)
    {
      var cisla = new List<int>() { -2, 5, 7, -10, 6, 8, 3 };

      /*
       * Co je to predikat:
       *   Funkce, ktera prirazuje prvku true/false. V tomhle pripade rozhoduje o tom, jestli prvek zahrnout to vystupu.
       * Co je Where:
       *   Je to funkce, ktera vezme vsechny prvky ze zadane posloupnosti (1. argument) a vrati jen ty, pro ktere plati predikat (2. argument).
       */

      // 1. verze
      var v1 = System.Linq.Enumerable.Where(cisla, JeSude);
      Vyechovat("v1", v1);

      // 2. verze
      Func<int, bool> predikat = JeSude;
      var v2 = System.Linq.Enumerable.Where(cisla, predikat);
      Vyechovat("v2", v2);

      // 3. verze
      Func<int, bool> predikatLambda = n => n % 2 == 0;
      var v3 = System.Linq.Enumerable.Where(cisla, predikatLambda);
      Vyechovat("v3", v3);

      // 4. verze
      var v4 = System.Linq.Enumerable.Where(cisla, n => n % 2 == 0);
      Vyechovat("v4", v4);

      // Jakpak asi funguje tohle?
      var unknonw = System.Linq.Enumerable.Select(cisla, n => n * 2);
      Vyechovat("?", unknonw);
    }

    static bool JeSude(int n)
    {
      return n % 2 == 0;
    }

    static void Vyechovat(string header, IEnumerable<int> n)
    {
      Console.Write(header);
      Console.Write(": ");
      Console.WriteLine(string.Join(", ", n));
    }

  }
}

Tohle má pak hromadu uplatněních. Je na tom třeba postavený celý Linq nebo komplet konfigurace Kestrelu (webový server v asp.net core).

 
Nahoru Odpovědět
7.11.2020 23:57
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.