Rust-ohjelmoinnin perusteet · Oppitunti

Lyhennyssäännöt

Milloin elinajat päätellään.

Oppitunti 4/413 vaihetta

Lyhennyssäännöt on ilmainen Rust-ohjelmoinnin perusteet-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Rust-ohjelmoinnin perusteet-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Rust-ohjelmoinnin perusteet-kurssilla on yhteensä 4 oppituntia.

Elinajat, joita ei tarvitse kirjoittaa

Monet funktiot ottavat vastaan ja palauttavat viittauksia ilman elinaikamääritteitä, ja ne silti kääntyvät. Tämä johtuu elinaikojen poisjätöstä: kääntäjä päättelee selvät elinajat puolestanne.

Poisjättö on vain lyhyt muoto

Elinaikojen poisjättö ei poista elinaikoja. Kääntäjä täydentää ne taustalla muutaman deterministisen säännön avulla. Kun säännöt kattavat tapauksen, voitte jättää määritteet pois.

Funktio ilman elinaikamääritteitä

Tällä funktiolla ei ole eksplisiittisiä elinaikoja, mutta kääntäjä ymmärtää palautetun viittauksen lainaavan syötteestä. Säännöt tekevät tilanteesta yksiselitteisen.

fn first_word(s: &str) -> &str {
    s.split(' ').next().unwrap_or("")
}

fn main() {
    let phrase = String::from("rust is fun");
    println!("{}", first_word(&phrase));
}

Sääntö 1: jokainen syöte saa oman elinaikansa

Ensimmäinen sääntö: jokainen parametreissa pois jätetty elinaika saa oman erillisen elinaikansa. Kaksi viittausparametria saa kaksi erillistä elinaikaa.

Sääntö 2: yksi syöte, yksi tulos

Toinen sääntö: jos syötteessä on täsmälleen yksi elinikä, se annetaan kaikille tuloksen elinajoille. Tämä kattaa esimerkiksi funktiot kuten first_word, jotka ottavat vastaan ja palauttavat yhden viittauksen.

fn trim_start(s: &str) -> &str {
    s.trim_start()
}

fn main() {
    println!("[{}]", trim_start("   hi"));
}

Sääntö 3: metodit ja &self

Kolmas sääntö: jos metodilla on &self tai &mut self, self-parametrin elinaika annetaan kaikille tuloksen elinajoille. Siksi metodit tarvitsevat harvoin määritteitä.

struct Holder { value: String }

impl Holder {
    fn get(&self) -> &str {
        &self.value
    }
}

fn main() {
    let h = Holder { value: String::from("stored") };
    println!("{}", h.get());
}

Kun poisjättö ei riitä

Jos jokin tuloksen elinaika on kaikkien kolmen säännön soveltamisen jälkeen edelleen tuntematon, kääntäjä pyytää ilmoittamaan sen eksplisiittisesti. longest-funktio on klassinen esimerkki: kaksi syötettä ja epäselvä tulos.

longest-funktio uudelleen

Kaksi viittaussyötettä ja yksi viittaustulos: sääntö 2 ei päde (syötteitä on enemmän kuin yksi), eikä mukana ole self-parametria. Siksi elinaika on ilmoitettava.

fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() { x } else { y }
}

fn main() {
    println!("{}", longest("abcd", "ab"));
}

Useita syötteitä, tulos self-parametrista

Useita parametreja sisältävä metodi saa silti tuloksen elinajan self-parametrilta säännön 3 mukaisesti, vaikka muut viittausparametrit ovat olemassa.

struct Doc { body: String }

impl Doc {
    fn announce(&self, _note: &str) -> &str {
        &self.body
    }
}

fn main() {
    let d = Doc { body: String::from("content") };
    println!("{}", d.announce("ping"));
}

Miksi säännöt ovat olemassa

Nämä kolme sääntöä kattavat valtaosan käytännön koodista, joten useimmat funktiot eivät tarvitse lainkaan elinaikasyntaksia. Kirjoitatte määritteet vain silloin, kun tarkoitus on aidosti epäselvä.

Pikainen tarkistuslista

Selvittääksenne, sovelletaanko elinaikojen poisjättöä, kysykää:

  • Onko viittauksia syötteenä täsmälleen yksi? Tulos lainaa siitä.
  • Onko mukana &self? Tulos lainaa self-parametrista.
  • Muussa tapauksessa ilmoittakaa elinajat eksplisiittisesti.

Pikatesti

Testaa, miten hyvin ymmärrät elinaikojen poisjättöä koskevat säännöt.

Kertaus

Opit, milloin elinajat päätellään:

  • Sääntö 1: jokainen syötteen viittaus saa oman elinaikansa
  • Sääntö 2: yksi syötteen elinaika yhdistetään kaikkiin tuloksen elinaikoihin
  • Sääntö 3: metodeissa &self antaa tuloksen elinajan
  • Jos tuloksen elinajat jäävät epäselviksi, ilmoitatte ne eksplisiittisesti
Aloita maksutta

Opi Rust 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
39
Oppitunnit
144

Usein kysytyt kysymykset

Onko oppitunti ”Lyhennyssäännöt” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Rust-ohjelmoinnin perusteet-oppimispolun 3 oppituntia, myös oppitunnin “Lyhennyssäännöt”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Rust-ohjelmoinnin perusteet-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Lyhennyssäännöt”?

Milloin elinajat päätellään. Harjoittelet Rust-ohjelmoinnin perusteet-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Rust-ohjelmoinnin perusteet-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Rust-ohjelmoinnin perusteet-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Lyhennyssäännöt”-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ä Rust-ohjelmoinnin perusteet-oppitunnilla?

Kyllä. Jokainen Rust-ohjelmoinnin perusteet-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. Miksi elinaikoja tarvitaan
  2. Elinaikojen annotaatiot
  3. Elinajat structeissa
  4. Lyhennyssäännöt
← Takaisin: Rust-ohjelmoinnin perusteet