0Pricing
Learn Rust Coding · Leçon

Annotations de durée de vie

Nommer les durées de vie

Annotations de durée de vie est une leçon Learn Rust Coding gratuite sur CoddyKit. Ceci est la leçon 2 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.

Nommer une durée de vie

Une annotation de durée de vie est un nom commençant par une apostrophe, comme 'a. Elle ne modifie pas la durée d'existence d'une donnée ; elle décrit les relations entre les durées de vie des références.

Où placer les annotations

Vous déclarez les paramètres de durée de vie entre chevrons après le nom de la fonction, puis vous les utilisez avec les types de référence, comme pour les paramètres de type génériques.

Syntaxe : fn name<'a>(x: &'a T) -> &'a T.

La fonction longest classique

Une fonction qui renvoie l'une de deux références a besoin d'une annotation. 'a indique que le résultat vit aussi longtemps que la plus courte des deux entrées.

fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() { x } else { y }
}

fn main() {
    let a = String::from("long string");
    let b = String::from("short");
    println!("{}", longest(&a, &b));
}

Ce que signifie 'a ici

L'annotation indique au compilateur que la référence renvoyée n'est valide que tant que les deux entrées sont valides. Le compilateur vérifie ensuite chaque site d'appel par rapport à ce contrat.

Pourquoi est-elle nécessaire ?

Sans l'annotation, le compilateur ne peut pas savoir si la valeur renvoyée emprunte à x ou à y. Le nom de durée de vie les relie afin que le vérificateur d'emprunts puisse raisonner sur le résultat.

Des durées de vie différentes

Lorsque les références n'ont aucun lien, donnez-leur des noms de durée de vie différents. Ici, seul x est renvoyé ; seule sa durée de vie est donc pertinente pour le résultat.

fn first<'a, 'b>(x: &'a str, _y: &'b str) -> &'a str {
    x
}

fn main() {
    let a = String::from("keep me");
    let b = String::from("ignore");
    println!("{}", first(&a, &b));
}

Les durées de vie ne prolongent pas l'existence

Les annotations ne prolongent jamais l'existence des données. Elles énoncent uniquement les contraintes que le compilateur doit vérifier. Si une valeur disparaît trop tôt, le code ne sera pas compilé, quelles que soient les annotations.

Un appel valide

Tant que les deux entrées vivent plus longtemps que l'utilisation du résultat, l'appel est accepté. Ici, les deux chaînes existent jusqu'à l'affichage, donc tout va bien.

fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() { x } else { y }
}

fn main() {
    let a = String::from("abcdef");
    let result;
    {
        let b = String::from("xy");
        result = longest(&a, &b);
        println!("chosen: {}", result);
    }
}

Durées de vie et génériques

Les paramètres de durée de vie et de type peuvent apparaître ensemble. Les durées de vie sont placées en premier entre les chevrons.

use std::fmt::Display;

fn announce<'a, T: Display>(text: &'a str, value: T) -> &'a str {
    println!("value is {}", value);
    text
}

fn main() {
    let msg = String::from("hello");
    println!("{}", announce(&msg, 42));
}

La durée de vie 'static

'static est une durée de vie spéciale qui signifie que la référence peut vivre pendant toute la durée du programme. Les littéraux de chaîne l'ont, car ils sont intégrés au binaire.

fn motto() -> &'static str {
    "fearless concurrency"
}

fn main() {
    println!("{}", motto());
}

Lire les annotations

Lisez &'a str comme une référence vers une chaîne valide pendant la durée de vie 'a. Lorsque deux paramètres partagent 'a, le compilateur lie leurs durées de vie à la plus courte lors de chaque appel.

Vérification rapide

Testez votre compréhension des annotations de durée de vie.

Récapitulatif

Vous avez appris à nommer les durées de vie :

  • Les durées de vie utilisent des noms comme 'a, déclarés entre chevrons
  • Les noms partagés indiquent que les références sont liées, par exemple lorsqu'un résultat dépend des entrées
  • Les annotations décrivent les durées de vie sans jamais les prolonger
  • 'static signifie qu'une référence est valide pendant tout le programme

Questions Fréquemment Posées

La leçon « Annotations de durée de vie » est-elle gratuite ?

Oui — le texte complet de « Annotations de durée de vie » 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 « Annotations de durée de vie » ?

Nommer les durées de vie 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 2 sur 4.

Combien de temps prend la leçon « Annotations de durée de vie » ?

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

  1. Pourquoi les durées de vie
  2. Annotations de durée de vie
  3. Durées de vie dans les structures
  4. Règles d’omission
← Retour à Learn Rust Coding