Mitä lausekepuut ovat
Ymmärtäkää, miten koodi esitetään tietorakenteena.
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.Int32Lausekkeiden 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); // 1Vain 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); // GreaterThanVakiot 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); // 5Metodikutsut 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); // ToUpperPuut 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); // 18Pikatesti
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.
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
- Mitä lausekepuut ovat
- Lausekkeiden manuaalinen rakentaminen
- Lausekkeiden kääntäminen ja suorittaminen
- Lausekepuut LINQ-palveluntarjoajissa