Zig Academy · Oppitunti

Funktiot, jotka ottavat tyypin parametrina

Toteuttakaa geneerisyys comptime T -parametreilla.

Oppitunti 1/413 vaihetta

Funktiot, jotka ottavat tyypin parametrina on ilmainen Zig 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 Zig Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Zig Academy-kurssilla on yhteensä 4 oppituntia.

Geneerisyys Zig-tyyliin

Zigissä ei ole erillistä geneeristä syntaksia. Sen sijaan funktio voi ottaa tyypin yhdeksi parametreistaan ja käyttää sitä kuten mitä tahansa muuta arvoa. ✨

Tyyppiparametri on comptime

Koska tyypin on oltava tiedossa koodia rakennettaessa, tyyppiparametri merkitään aina comptime-määritteellä. Kutsuja välittää varsinaisen tyypin.

fn first(comptime T: type, items: []const T) T {
    return items[0];
}

type on varsinainen tyyppi

Zigissä sana type on itsessään tyyppi, joten parametri voidaan määritellä tyyppinä type tarkoittamaan mitä tahansa tyyppiä.

comptime T: type

Käytä T:tä allekirjoituksessa

Kun olet nimennyt tyypin T:ksi, voit käyttää sitä myöhemmissä parametreissa ja paluutyypissä ja sitoa ne kaikki yhteen.

fn max(comptime T: type, a: T, b: T) T {
    return if (a > b) a else b;
}

Geneerisen funktion kutsuminen

Kutsu funktiota välittämällä ensin konkreettinen tyyppi ja sen jälkeen tavalliset argumentit. Tässä pyydämme kahdesta i32-arvosta suurempaa.

const m = max(i32, 3, 9);

Yksi funktio, monta tyyppiä

Sama funktio toimii kaikilla tyypeillä, jotka tukevat käyttämiäsi operaatioita. Vaihda i32 tyypiksi f64, niin koodi toimii edelleen.

const f = max(f64, 1.5, 2.5);

Zig erikoistaa jokaisen kutsun

Jokaiselle välittämällesi eri tyypille Zig tuottaa funktiosta oman kopionsa. Tätä kutsutaan monomorfisaatioksi, ja se tehdään käännösaikana.

Runko pysyy geneerisenä

Kirjoitat tyypin eksplisiittisesti kutsussa, mutta runko pysyy geneerisenä. Zig tarkistaa, että käyttämäsi operaatiot ovat kelvollisia riippumatta siitä, mikä T saapuu.

type ei tarkoita piilevää boxingia

Varsinaisen type-tyypin välittäminen eroaa suoritusajan polymorfismista: vtablea tai boxingia ei ole, vaan ainoastaan käännösaikana valittu konkreettinen kopio.

Virheet tulevat esiin käännösaikana

Jos kutsut max-funktiota tyypillä, jolla ei ole suurempi kuin -operaattoria, Zig ilmoittaa ongelmasta rakentaessaan kyseistä erikoistusta, ei suoritusajon aikana.

Tyyppiparametrit ensin

Yleisen käytännön mukaan comptime-tyyppiparametri luetellaan ennen arvoparametreja, jotta tyyppi tunnetaan ennen datan kuvaamista.

fn clone(comptime T: type, value: T) T {
    return value;
}

Pikatarkistus

Haluat Zigissä funktion, joka toimii monilla tyypeillä. Miten määrittelet sen tyyppiparametrin?

Kertaus

Välitä comptime T: type -parametri, jotta funktiosta tulee geneerinen. Zig rakentaa erikoistetun version jokaiselle käyttämällesi tyypille. 🎯

Aloita maksutta

Opi Zig 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
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”Funktiot, jotka ottavat tyypin parametrina” ilmainen?

Kyllä – oppitunnin ”Funktiot, jotka ottavat tyypin parametrina” 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 Zig Academy-kurssin, päivitä CoddyKit PROhon. Zig Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Funktiot, jotka ottavat tyypin parametrina”?

Toteuttakaa geneerisyys comptime T -parametreilla. Harjoittelet Zig Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Zig Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Zig 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 ”Funktiot, jotka ottavat tyypin parametrina”-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ä Zig Academy-oppitunnilla?

Kyllä. Jokainen Zig 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. Funktiot, jotka ottavat tyypin parametrina
  2. Geneeriset tietorakenteet
  3. @TypeOf ja tyyppien introspektio
  4. anytype-parametrit
← Takaisin: Zig Academy