Lyhennyssäännöt
Milloin elinajat päätellään.
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
&selfantaa tuloksen elinajan - Jos tuloksen elinajat jäävät epäselviksi, ilmoitatte ne eksplisiittisesti
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.