C# Academy · Oppitunti

Koostettavuusvinkit

Pitäkää LINQ koostettavana: käyttäkää pieniä puhtaita ehtoja ja muunnoksia, koostakaa delegaatteja, lisätkää pieniä laajennusapuja ja palauttakaa IEnumerable -putkia.

Oppitunti 3/38 vaihetta

Koostettavuusvinkit on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/3. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C# Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C# Academy-kurssilla on yhteensä 3 oppituntia.

Koostettavan LINQ:n yleiskatsaus

Tavoite: Tee LINQ:stä helposti laajennettava.

  • Kirjoita pieniä puhtaita predikaatteja ja muunnoksia
  • Koosta funktioita ilman sivuvaikutuksia
  • Lisää pieniä laajennusapuja
  • Palauta IEnumerable<T>-putkia

Uudelleenkäytettävät puhtaat apurit

Erottele pienet puhtaat metodit ja välitä ne metodiryhminä. Uudelleenkäyttö pitää putket lyhyinä ja helposti luettavina.

using System;
using System.Linq;

public class Program
{
  static bool IsEven(int n) { return n % 2 == 0; }   // pure predicate
  static int Square(int n) { return n * n; }         // pure transform

  public static void Main(string[] args)
  {
    int[] xs = new int[] { 1, 2, 3, 4, 5, 6 };

    var q = xs
      .Where(IsEven)     // reuse predicate
      .Select(Square);   // reuse transform

    foreach (int v in q) Console.WriteLine(v); // 4 16 36
  }
}

Predikaattien koostaminen

Muodosta uusia predikaatteja koostamalla pienempiä predikaatteja. Näin logiikka pysyy helposti testattavana ja uudelleenkäytettävänä.

using System;
using System.Linq;

public class Program
{
  // Return a predicate n > threshold
  static Func<int, bool> GreaterThan(int threshold)
  {
    return delegate(int n) { return n > threshold; };
  }

  // Combine two predicates with AND
  static Func<int, bool> And(Func<int, bool> a, Func<int, bool> b)
  {
    return delegate(int n) { return a(n) && b(n); };
  }

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

  public static void Main(string[] args)
  {
    int[] xs = new int[] { 1, 2, 3, 4, 5, 6 };

    Func<int, bool> gt2 = GreaterThan(2);
    Func<int, bool> evenAndGt2 = And(IsEven, gt2);

    var q = xs.Where(evenAndGt2); // even and > 2 => 4,6

    foreach (int v in q) Console.WriteLine(v);
  }
}

Luettavat laajennukset

Lisää pieni laajennus ilmaisemaan tarkoitus selkeästi, esimerkiksi WhereNot. Pidä se yksinkertaisena ja sivuvaikutuksettomana.

using System;
using System.Collections.Generic;
using System.Linq;

public static class LinqEx
{
  public static IEnumerable<T> WhereNot<T>(this IEnumerable<T> src, Func<T, bool> predicate)
  {
    foreach (T item in src)
    {
      if (!predicate(item)) yield return item;
    }
  }
}

public class Program
{
  static bool IsVowel(char c)
  {
    char x = Char.ToLower(c);
    return x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u';
  }

  public static void Main(string[] args)
  {
    char[] letters = new char[] { 'a', 'b', 'c', 'e', 'i' };

    var consonants = letters.WhereNot(IsVowel);

    foreach (char c in consonants) Console.WriteLine(c); // b, c
  }
}

Uudelleenkäytettävät putkiapurit

Tarjoa uudelleenkäytettäviä IEnumerable<T>-apuja. Kutsujat voivat jatkaa koostamista esimerkiksi OrderBy- ja Take-operaattoreilla.

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  static bool IsEven(int n) { return n % 2 == 0; }
  static int Square(int n) { return n * n; }

  // Reusable pipeline helper: filter evens and square
  public static IEnumerable<int> SquaresOfEvens(IEnumerable<int> xs)
  {
    foreach (int x in xs)
    {
      if (IsEven(x)) yield return Square(x);
    }
  }

  public static void Main(string[] args)
  {
    int[] data = new int[] { 1, 2, 3, 4, 5, 6 };

    var pipeline = SquaresOfEvens(data); // composable
    var topTwo = pipeline.OrderByDescending(x => x).Take(2);

    foreach (int v in topTwo) Console.WriteLine(v); // 36, 16
  }
}

Koostettavuuden tarkistuslista

Vinkkejä:

  • Suosi puhtaita apuja ja vältä sivuvaikutuksia Select- ja Where-operaattoreissa.
  • Koosta predikaatteja ja muunnoksia. Nimeä ne hyvin.
  • Palauta apumetodeista IEnumerable<T>, jotta kutsujat voivat jatkaa ketjua.
  • Materialisoi myöhään. Vältä ToList-operaattoria ketjun keskellä, ellei sitä tarvita.

Koostettavuuden paras käytäntö

Pikatarkistus: Mikä käytäntö pitää LINQ-putket parhaiten koostettavina ja testattavina?

Kertaus

Kertaus: Erottele pienet puhtaat apurit, kokoa predikaatteja, lisää pieniä laajennuksia ja palauta putkia, jotta kutsujat voivat jatkaa ketjuttamista.

Aloita maksutta

Opi C# tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
93
Oppitunnit
346

Usein kysytyt kysymykset

Onko oppitunti ”Koostettavuusvinkit” ilmainen?

Kyllä – oppitunnin ”Koostettavuusvinkit” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C# Academy-kurssin, päivitä CoddyKit PROhon. C# Academy-kurssilla on yhteensä 3 oppituntia.

Mitä opin oppitunnilla ”Koostettavuusvinkit”?

Pitäkää LINQ koostettavana: käyttäkää pieniä puhtaita ehtoja ja muunnoksia, koostakaa delegaatteja, lisätkää pieniä laajennusapuja ja palauttakaa IEnumerable -putkia. Harjoittelet C# Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C# Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C# Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/3.

Kuinka kauan ”Koostettavuusvinkit”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C# Academy-oppitunnilla?

Kyllä. Jokainen C# Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. GroupBy, Join, Aggregate ja projektiot (anonyymit tyypit)
  2. Materiialisointi (ToList, ToDictionary) ja suorituskykyhuomiot
  3. Koostettavuusvinkit
← Takaisin: C# Academy