Visibilidad de los Campos de Structs en Rust

RustRustBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprendemos sobre la visibilidad de los structs en Rust y cómo afecta la accesibilidad de sus campos.

Nota: Si el laboratorio no especifica un nombre de archivo, puede usar cualquier nombre de archivo que desee. Por ejemplo, puede usar main.rs, compilar y ejecutarlo con rustc main.rs &&./main.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) 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/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{{"Visibilidad de los Campos de Structs en Rust"}} rust/string_type -.-> lab-99333{{"Visibilidad de los Campos de Structs en Rust"}} rust/type_casting -.-> lab-99333{{"Visibilidad de los Campos de Structs en Rust"}} rust/function_syntax -.-> lab-99333{{"Visibilidad de los Campos de Structs en Rust"}} rust/expressions_statements -.-> lab-99333{{"Visibilidad de los Campos de Structs en Rust"}} rust/method_syntax -.-> lab-99333{{"Visibilidad de los Campos de Structs en Rust"}} rust/operator_overloading -.-> lab-99333{{"Visibilidad de los Campos de Structs en Rust"}} end

Visibilidad de los structs

Los structs tienen un nivel adicional de visibilidad en sus campos. La visibilidad por defecto es privada y se puede anular con el modificador pub. Esta visibilidad solo es importante cuando se accede a un struct desde fuera del módulo donde se define y tiene como objetivo ocultar información (encapsulación).

mod my {
    // Un struct público con un campo público de tipo genérico `T`
    pub struct OpenBox<T> {
        pub contents: T,
    }

    // Un struct público con un campo privado de tipo genérico `T`
    pub struct ClosedBox<T> {
        contents: T,
    }

    impl<T> ClosedBox<T> {
        // Un método constructor público
        pub fn new(contents: T) -> ClosedBox<T> {
            ClosedBox {
                contents: contents,
            }
        }
    }
}

fn main() {
    // Los structs públicos con campos públicos se pueden construir como de costumbre
    let open_box = my::OpenBox { contents: "información pública" };

    // y sus campos se pueden acceder normalmente.
    println!("La caja abierta contiene: {}", open_box.contents);

    // Los structs públicos con campos privados no se pueden construir usando los nombres de campo.
    // Error! `ClosedBox` tiene campos privados
    //let closed_box = my::ClosedBox { contents: "información clasificada" };
    // TODO ^ Intenta descomentar esta línea

    // Sin embargo, los structs con campos privados se pueden crear usando
    // constructores públicos
    let _closed_box = my::ClosedBox::new("información clasificada");

    // y los campos privados de un struct público no se pueden acceder.
    // Error! El campo `contents` es privado
    //println!("La caja cerrada contiene: {}", _closed_box.contents);
    // TODO ^ Intenta descomentar esta línea
}

Resumen

¡Felicidades! Has completado el laboratorio de Visibilidad de los structs. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.