String ou &str
Propriété du texte
String ou &str est une leçon Learn Rust Coding gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Learn Rust Coding, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Learn Rust Coding comprend 4 leçons au total.
Texte dont vous avez la propriété ou texte emprunté
Rust sépare la propriété du texte en deux types :
String— possède ses données sur le tas.&str— emprunte une vue d'un texte qu'il ne possède pas.
fn main() {
let owned = String::from("I own this");
let borrowed: &str = "I am borrowed";
println!("{} / {}", owned, borrowed);
}Où résident les données
Une String stocke ses octets sur le tas et peut grandir. Un littéral de chaîne &str est intégré au binaire du programme et est fixe.
fn main() {
let mut heap = String::from("grows");
heap.push_str(" bigger");
let fixed = "never changes";
println!("{} | {}", heap, fixed);
}La propriété implique une responsabilité
Le propriétaire d'une String libère sa mémoire lorsqu'elle sort de la portée. Un &str ne possède rien et ne libère donc rien.
fn main() {
{
let s = String::from("temporary");
println!("{}", s);
} // s is dropped and its memory freed here
println!("done");
}Emprunter une String
Vous pouvez emprunter une String comme &str avec &. La String possède toujours les données ; la tranche ne fait que les consulter.
fn main() {
let owned = String::from("shared text");
let view: &str = &owned;
println!("{} / {}", owned, view);
}Déplacer une String
Affecter une String à une autre variable déplace sa propriété. L'originale ne peut alors plus être utilisée.
fn main() {
let a = String::from("hello");
let b = a; // ownership moves to b
// println!("{}", a); // would error: a was moved
println!("{}", b);
}Cloner pour conserver les deux
Si vous avez besoin de deux chaînes indépendantes dont vous avez la propriété, utilisez clone pour copier les données.
fn main() {
let a = String::from("hello");
let b = a.clone();
println!("{} and {}", a, b);
}Copier un &str ne coûte presque rien
Un &str n'est qu'un pointeur et une longueur ; le copier ne copie donc pas le texte sous-jacent. Il implémente Copy.
fn main() {
let original = "data";
let copy = original; // both still valid
println!("{} {}", original, copy);
}Fonctions et propriété
Transmettre une String par valeur déplace celle-ci dans la fonction. Transmettre &str ou &String ne fait que l'emprunter, ce qui laisse la valeur de l'appelant utilisable.
fn length(s: &str) -> usize {
s.len()
}
fn main() {
let text = String::from("measure me");
println!("{}", length(&text));
println!("still here: {}", text);
}Renvoyer des chaînes dont vous avez la propriété
Lorsqu'une fonction doit produire un nouveau texte, elle renvoie une String dont vous avez la propriété afin que l'appelant en prenne la propriété.
fn make_greeting(name: &str) -> String {
format!("Hello, {}!", name)
}
fn main() {
let g = make_greeting("Rust");
println!("{}", g);
}Choisir le bon type
Principes :
- Vous devez stocker un texte dont vous avez la propriété ? Utilisez
String. - Vous devez simplement lire ou transmettre du texte ? Acceptez
&str. - Vous construisez un nouveau texte dans une fonction ? Renvoyez
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));
}Pourquoi cette distinction est importante
Cette séparation permet à Rust d'éviter les copies inutiles et de garantir la sécurité mémoire sans ramasse-miettes. Vous savez toujours qui possède une portion de texte.
fn main() {
let owned = String::from("safe");
let borrowed = &owned[..];
println!("owner {} borrows {}", owned, borrowed);
}Vérification rapide
Rappelez-vous ce qui se produit lorsque vous déplacez une String.
Récapitulatif
Propriété de String et de &str :
Stringpossède les données du tas et les libère lors de sa destruction.&stremprunte un texte existant et ne possède rien.- Déplacer une String invalide l'originale ;
clonela copie. - Acceptez
&strpour lire et renvoyezStringpour produire un nouveau texte.
fn shout(s: &str) -> String {
s.to_uppercase()
}
fn main() {
let name = String::from("rust");
let loud = shout(&name);
println!("{} -> {}", name, loud);
}Apprends Rust avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 39
- Leçons
- 144
Questions Fréquemment Posées
La leçon « String ou &str » est-elle gratuite ?
Oui — le texte complet de « String ou &str » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Learn Rust Coding, passe à CoddyKit PRO. Le cours Learn Rust Coding comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « String ou &str » ?
Propriété du texte Tu pratiques Learn Rust Coding avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Learn Rust Coding ?
Aucune expérience préalable n'est requise. Learn Rust Coding sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « String ou &str » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Learn Rust Coding ?
Oui. Chaque leçon Learn Rust Coding inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- String ou &str
- Tranches
- Méthodes des chaînes
- UTF-8 et caractères