Visibilité des champs de structs en Rust

RustRustBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous apprenons à connaître la visibilité des structs en Rust et comment elle affecte l'accèsibilité de leurs champs.

Note : Si le nom de fichier n'est pas spécifié dans le laboratoire, vous pouvez utiliser n'importe quel nom de fichier que vous voulez. Par exemple, vous pouvez utiliser main.rs, le compiler et l'exécuter avec rustc main.rs &&./main.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/string_type("String Type") rust/DataTypesGroup -.-> rust/type_casting("Type Conversion and Casting") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/variable_declarations -.-> lab-99333{{"Visibilité des champs de structs en Rust"}} rust/string_type -.-> lab-99333{{"Visibilité des champs de structs en Rust"}} rust/type_casting -.-> lab-99333{{"Visibilité des champs de structs en Rust"}} rust/function_syntax -.-> lab-99333{{"Visibilité des champs de structs en Rust"}} rust/expressions_statements -.-> lab-99333{{"Visibilité des champs de structs en Rust"}} rust/method_syntax -.-> lab-99333{{"Visibilité des champs de structs en Rust"}} rust/operator_overloading -.-> lab-99333{{"Visibilité des champs de structs en Rust"}} end

Visibilité des structs

Les structs ont un niveau supplémentaire de visibilité pour leurs champs. La visibilité est par défaut privée et peut être modifiée avec le modificateur pub. Cette visibilité n'a d'importance que lorsqu'un struct est accédé depuis l'extérieur du module dans lequel il est défini, et a pour but de cacher des informations (encapsulation).

mod my {
    // Un struct public avec un champ public de type générique `T`
    pub struct OpenBox<T> {
        pub contents: T,
    }

    // Un struct public avec un champ privé de type générique `T`
    pub struct ClosedBox<T> {
        contents: T,
    }

    impl<T> ClosedBox<T> {
        // Une méthode de construction publique
        pub fn new(contents: T) -> ClosedBox<T> {
            ClosedBox {
                contents: contents,
            }
        }
    }
}

fn main() {
    // Les structs publics avec des champs publics peuvent être construits comme d'habitude
    let open_box = my::OpenBox { contents: "public information" };

    // et leurs champs peuvent être normalement accédés.
    println!("The open box contains: {}", open_box.contents);

    // Les structs publics avec des champs privés ne peuvent pas être construits en utilisant les noms de champs.
    // Erreur! `ClosedBox` a des champs privés
    //let closed_box = my::ClosedBox { contents: "classified information" };
    // TODO ^ Essayez de décommenter cette ligne

    // Cependant, les structs avec des champs privés peuvent être créés en utilisant
    // des constructeurs publics
    let _closed_box = my::ClosedBox::new("classified information");

    // et les champs privés d'un struct public ne peuvent pas être accédés.
    // Erreur! Le champ `contents` est privé
    //println!("The closed box contains: {}", _closed_box.contents);
    // TODO ^ Essayez de décommenter cette ligne
}

Résumé

Félicitations! Vous avez terminé le laboratoire sur la visibilité des structs. Vous pouvez pratiquer d'autres laboratoires dans LabEx pour améliorer vos compétences.