Rust-ohjelmoinnin perusteet · Oppitunti

String ja &str

Tekstin omistajuus.

Oppitunti 1/413 vaihetta

String ja &str on ilmainen Rust-ohjelmoinnin perusteet-oppitunti CoddyKitissä. Tämä on oppitunti 1/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.

Omistettu ja lainattu teksti

Rust erottaa tekstin omistajuuden kahteen tyyppiin:

  • String — omistaa datansa keossa.
  • &str — lainaa näkymän tekstiin, jota se ei omista.
fn main() {
    let owned = String::from("I own this");
    let borrowed: &str = "I am borrowed";
    println!("{} / {}", owned, borrowed);
}

Missä data sijaitsee

String tallentaa tavunsa kekoon ja voi kasvaa. Merkkijonoliteraali &str on sisällytetty ohjelman binääriin, ja sen koko on kiinteä.

fn main() {
    let mut heap = String::from("grows");
    heap.push_str(" bigger");
    let fixed = "never changes";
    println!("{} | {}", heap, fixed);
}

Omistajuus tarkoittaa vastuuta

String-arvon omistaja vapauttaa sen muistin, kun arvo poistuu näkyvyysalueelta. &str ei omista mitään, joten se ei myöskään vapauta mitään.

fn main() {
    {
        let s = String::from("temporary");
        println!("{}", s);
    } // s is dropped and its memory freed here
    println!("done");
}

String-arvon lainaaminen

Voitte lainata String-arvon &str-arvoksi käyttämällä &-operaattoria. String omistaa datan edelleen; viipale vain tarkastelee sitä.

fn main() {
    let owned = String::from("shared text");
    let view: &str = &owned;
    println!("{} / {}", owned, view);
}

String-arvon siirtäminen

String-arvon sijoittaminen toiseen muuttujaan siirtää omistajuuden. Alkuperäistä arvoa ei voi enää käyttää.

fn main() {
    let a = String::from("hello");
    let b = a; // ownership moves to b
    // println!("{}", a); // would error: a was moved
    println!("{}", b);
}

Kloonaaminen molempien säilyttämiseksi

Jos tarvitsette kaksi toisistaan riippumatonta omistettua merkkijonoa, käyttäkää clone-metodia datan kopioimiseen.

fn main() {
    let a = String::from("hello");
    let b = a.clone();
    println!("{} and {}", a, b);
}

&str-arvon kopioiminen on halpaa

&str sisältää vain osoittimen ja pituuden, joten sen kopioiminen ei kopioi taustalla olevaa tekstiä. Se toteuttaa Copy-traitin.

fn main() {
    let original = "data";
    let copy = original; // both still valid
    println!("{} {}", original, copy);
}

Funktiot ja omistajuus

String-arvon välittäminen arvona siirtää sen funktiolle. &str- tai &String-arvon välittäminen vain lainaa arvoa, joten kutsujan arvoa voi edelleen käyttää.

fn length(s: &str) -> usize {
    s.len()
}

fn main() {
    let text = String::from("measure me");
    println!("{}", length(&text));
    println!("still here: {}", text);
}

Omistettujen merkkijonojen palauttaminen

Kun funktion täytyy tuottaa uutta tekstiä, se palauttaa omistetun String-arvon, jolloin kutsuja saa omistajuuden.

fn make_greeting(name: &str) -> String {
    format!("Hello, {}!", name)
}

fn main() {
    let g = make_greeting("Rust");
    println!("{}", g);
}

Oikean tyypin valitseminen

Ohjeet:

  • Tallennatteko omistettua tekstiä? Käyttäkää tyyppiä String.
  • Luetteko tai välitättekö tekstiä? Hyväksykää tyyppi &str.
  • Rakennatteko funktiossa uutta tekstiä? Palauttakaa String.
fn first_word(s: &str) -> &str {
    s.split_whitespace().next().unwrap_or("")
}

fn main() {
    let sentence = String::from("learn rust today");
    println!("{}", first_word(&sentence));
}

Miksi erottelu on tärkeä

Tämän erottelun ansiosta Rust voi välttää tarpeettomia kopioita ja taata muistiturvallisuuden ilman roskienkeräintä. Tiedätte aina, kuka omistaa tietyn tekstiosan.

fn main() {
    let owned = String::from("safe");
    let borrowed = &owned[..];
    println!("owner {} borrows {}", owned, borrowed);
}

Pikatarkistus

Palauttakaa mieleenne, mitä tapahtuu, kun String-arvo siirretään.

Kertaus

String- ja &str-arvojen omistajuus:

  • String omistaa keossa olevan datan ja vapauttaa sen pudotessaan.
  • &str lainaa olemassa olevaa tekstiä eikä omista mitään.
  • String-arvon siirtäminen tekee alkuperäisestä arvosta käyttökelvottoman; clone kopioi sen.
  • Hyväksykää &str tekstin lukemiseen ja palauttakaa String uuden tekstin tuottamiseen.
fn shout(s: &str) -> String {
    s.to_uppercase()
}

fn main() {
    let name = String::from("rust");
    let loud = shout(&name);
    println!("{} -> {}", name, loud);
}
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 ”String ja &str” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Rust-ohjelmoinnin perusteet-oppimispolun 3 oppituntia, myös oppitunnin “String ja &str”. 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 ”String ja &str”?

Tekstin omistajuus. 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 1/4.

Kuinka kauan ”String ja &str”-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. String ja &str
  2. Viipaleet
  3. String-metodit
  4. UTF-8 ja char-merkit
← Takaisin: Rust-ohjelmoinnin perusteet