C# Academy · Oppitunti

Mitä lausekepuut ovat

Ymmärtäkää, miten koodi esitetään tietorakenteena.

Oppitunti 1/413 vaihetta

Mitä lausekepuut ovat on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. 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ä 4 oppituntia.

Koodi tietona

Lausekepuu esittää koodin tietorakenteena, jota voitte tutkia ajonaikana, sen sijaan että kyse olisi vain suoritettavista käännetyistä käskyistä. C# mallintaa tämän tyypillä Expression<TDelegate>.

Lambda delegaattina ja puuna

Kun sijoitatte lambdan tyyppiin Func<...>, saatte suoritettavaa koodia. Kun sijoitatte saman lambdan tyyppiin Expression<Func<...>>, kääntäjä muodostaa sitä kuvaavan puun.

using System;
using System.Linq.Expressions;

Func<int, int> runnable = x => x + 1;          // compiled delegate
Expression<Func<int, int>> tree = x => x + 1;  // data structure

Console.WriteLine(runnable(5));   // 6
Console.WriteLine(tree);          // x => (x + 1)

Puun tutkiminen

Koska lausekepuu on tietoa, voitte lukea sen osia, kuten parametrit, rungon ja solmutyypin.

using System;
using System.Linq.Expressions;

Expression<Func<int, int>> tree = x => x + 1;
Console.WriteLine(tree.Parameters[0].Name); // x
Console.WriteLine(tree.Body.NodeType);      // Add
Console.WriteLine(tree.ReturnType);         // System.Int32

Lausekkeiden luokkahierarkia

Jokainen solmu periytyy tyypistä System.Linq.Expressions.Expression. Yleisiä tyyppejä ovat BinaryExpression, ParameterExpression, ConstantExpression ja MethodCallExpression.

using System;
using System.Linq.Expressions;

Expression<Func<int, int>> tree = x => x + 1;
var body = (BinaryExpression)tree.Body;
Console.WriteLine(body.Left);  // x
Console.WriteLine(body.Right); // 1

Vain lausekelambdat ovat sallittuja

Voitte muuntaa puuksi vain yhden lausekkeen lambdan. Lausekerungolla varustettuja lambdoja eli aaltosulkeita käyttäviä lambdoja ei voi esittää lausekupuina.

using System;
using System.Linq.Expressions;

Expression<Func<int, int>> ok = x => x * 2;    // fine
// Expression<Func<int,int>> bad = x => { return x*2; }; // compile error
Console.WriteLine(ok); // x => (x * 2)

Miksi tällä on merkitystä

Lausekepuiden avulla kirjastot voivat ymmärtää koodianne sen sijaan, että ne vain suorittaisivat sen. LINQ-palveluntarjoajat muuntavat ne SQL:ksi, dynaamisiksi kyselyiksi tai muiksi kohdemuodoiksi.

NodeType kertoo toiminnon

NodeType-ominaisuus on ExpressionType-enumeraattorin arvo, joka ilmaisee kyseisen solmun toiminnon.

using System;
using System.Linq.Expressions;

Expression<Func<int, bool>> tree = x => x > 10;
Console.WriteLine(tree.Body.NodeType); // GreaterThan

Vakiot ja parametrit

ParameterExpression edustaa syötettä, kun taas ConstantExpression sisältää koodiin upotetun literaaliarvon.

using System;
using System.Linq.Expressions;

Expression<Func<int, int>> tree = x => x + 5;
var body = (BinaryExpression)tree.Body;
Console.WriteLine(body.Left.GetType().Name);  // ParameterExpression (or TypedParameterExpression)
Console.WriteLine(((ConstantExpression)body.Right).Value); // 5

Metodikutsut puissa

Metodia kutsuvasta lambdasta muodostuu MethodCallExpression, joka paljastaa metodin ja sen argumentit.

using System;
using System.Linq.Expressions;

Expression<Func<string, int>> tree = s => s.Length;
// member access here; a call example:
Expression<Func<string, string>> call = s => s.ToUpper();
var mc = (MethodCallExpression)call.Body;
Console.WriteLine(mc.Method.Name); // ToUpper

Puut ovat muuttumattomia

Lausekepuut ovat muuttumattomia. Jos haluatte "muuttaa" puuta, muodostatte sen osista uuden puun. Näin visitorit ja uudelleenkirjoittajat toimivat.

Yhdistetään kaikki

Tässä tutkimme pienen predikaattipuun alusta loppuun: parametrin, operaattorin ja vakion.

using System;
using System.Linq.Expressions;

Expression<Func<int, bool>> isAdult = age => age >= 18;
var body = (BinaryExpression)isAdult.Body;
Console.WriteLine(isAdult.Parameters[0].Name);          // age
Console.WriteLine(body.NodeType);                       // GreaterThanOrEqual
Console.WriteLine(((ConstantExpression)body.Right).Value); // 18

Pikatesti

Varmistakaa, mikä tekee lausekupuusta erityisen.

Kertaus

Opitte, mitä lausekepuut ovat.

  • Expression<TDelegate> esittää koodin tutkittavana tietona.
  • Solmuja ovat parametrit, vakiot, binäärioperaatiot ja metodikutsut.
  • Vain yhden lausekkeen lambdat kelpaavat.
  • Puut ovat muuttumattomia, joten uudelleenkirjoitus muodostaa uusia puita.
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 ”Mitä lausekepuut ovat” ilmainen?

Kyllä – oppitunnin ”Mitä lausekepuut ovat” 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ä 4 oppituntia.

Mitä opin oppitunnilla ”Mitä lausekepuut ovat”?

Ymmärtäkää, miten koodi esitetään tietorakenteena. 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 1/4.

Kuinka kauan ”Mitä lausekepuut ovat”-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. Mitä lausekepuut ovat
  2. Lausekkeiden manuaalinen rakentaminen
  3. Lausekkeiden kääntäminen ja suorittaminen
  4. Lausekepuut LINQ-palveluntarjoajissa
← Takaisin: C# Academy