Lär dig programmera i Rust · Lektion

String jämfört med &str

Ägarskap för text

Lektion 1 av 413 steg

String jämfört med &str är en gratis lektion i Lär dig programmera i Rust på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lär dig programmera i Rust, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lär dig programmera i Rust innehåller totalt 4 lektioner.

Ägda och lånade textvärden

Rust skiljer mellan text med ägarskap genom två typer:

  • String — äger sina data på heapen.
  • &str — lånar en vy av text som den inte äger.
fn main() {
    let owned = String::from("I own this");
    let borrowed: &str = "I am borrowed";
    println!("{} / {}", owned, borrowed);
}

Var data finns

En String lagrar sina byte på heapen och kan växa. En strängliteral av typen &str är inbyggd i programmets binärfil och har en fast storlek.

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

Ägarskap innebär ansvar

Ägaren till en String frigör dess minne när den lämnar sitt scope. En &str äger ingenting och frigör därför aldrig något.

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

Låna en String

Ni kan låna en String som en &str med hjälp av &. String-objektet äger fortfarande datan; slicen tittar bara på den.

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

Flytta en String

När en String tilldelas till en annan variabel flyttas ägarskapet. Originalet kan inte längre användas.

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

Klona för att behålla båda

Om ni behöver två fristående ägda strängar använder ni clone för att kopiera datan.

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

Det är billigt att kopiera en &str

En &str består bara av en pekare och en längd, så när den kopieras kopieras inte den underliggande texten. Den implementerar Copy.

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

Funktioner och ägarskap

När en String skickas med värde flyttas den in i funktionen. När &str eller &String skickas lånas den bara, så anroparens värde kan fortfarande användas.

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

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

Returnera ägda strängar

När en funktion måste skapa ny text returnerar den en ägd String, så att anroparen tar över ägarskapet.

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

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

Välj rätt typ

Riktlinjer:

  • Ska ni lagra ägd text? Använd String.
  • Ska ni bara läsa eller skicka text? Acceptera &str.
  • Ska ni skapa ny text i en funktion? Returnera 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));
}

Varför skillnaden är viktig

Den här uppdelningen gör att Rust kan undvika onödiga kopior och garantera minnessäkerhet utan en skräpsamlare. Ni vet alltid vem som äger en viss textdel.

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

Snabbtest

Kom ihåg vad som händer när ni flyttar en String.

Sammanfattning

Ägarskap för String jämfört med &str:

  • String äger data på heapen och frigör den när värdet tas bort.
  • &str lånar befintlig text och äger ingenting.
  • När en String flyttas blir originalet ogiltigt; clone kopierar den.
  • Acceptera &str för läsning och returnera String för att skapa ny text.
fn shout(s: &str) -> String {
    s.to_uppercase()
}

fn main() {
    let name = String::from("rust");
    let loud = shout(&name);
    println!("{} -> {}", name, loud);
}
Gratis att börja

Lär dig Rust med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
39
Lektioner
144

Vanliga frågor

Är lektionen ”String jämfört med &str” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lär dig programmera i Rust, inklusive ”String jämfört med &str”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lär dig programmera i Rust innehåller totalt 4 lektioner.

Vad lär jag mig i ”String jämfört med &str”?

Ägarskap för text Ni övar på Lär dig programmera i Rust med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Lär dig programmera i Rust?

Du behöver inga förkunskaper. Utbildningen i Lär dig programmera i Rust på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”String jämfört med &str”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Lär dig programmera i Rust-lektionen?

Ja. Varje Lär dig programmera i Rust-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. String jämfört med &str
  2. Slices
  3. String-metoder
  4. UTF-8 och tecken
← Tillbaka till Lär dig programmera i Rust