String ja &str
Tekstin omistajuus.
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:
Stringomistaa keossa olevan datan ja vapauttaa sen pudotessaan.&strlainaa olemassa olevaa tekstiä eikä omista mitään.- String-arvon siirtäminen tekee alkuperäisestä arvosta käyttökelvottoman;
clonekopioi sen. - Hyväksykää
&strtekstin lukemiseen ja palauttakaaStringuuden tekstin tuottamiseen.
fn shout(s: &str) -> String {
s.to_uppercase()
}
fn main() {
let name = String::from("rust");
let loud = shout(&name);
println!("{} -> {}", name, loud);
}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
- String ja &str
- Viipaleet
- String-metodit
- UTF-8 ja char-merkit