0Pricing
Learn Rust Coding · Lección

pub y visibilidad

Controlar el acceso

pub y visibilidad es una lección gratuita de Learn Rust Coding en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn Rust Coding, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn Rust Coding incluye 4 lecciones en total.

privado de forma predeterminada

En Rust, todo lo que se encuentra dentro de un módulo es privado de forma predeterminada. Los demás módulos no pueden verlo a menos que lo habilite con pub.

Este valor predeterminado seguro mantiene ocultos los detalles de implementación hasta que decide exponerlos deliberadamente.

funciones pub

Marcar una función como pub permite llamarla desde fuera de su módulo. Sin esta marca, la llamada no se puede compilar.

mod math {
    pub fn square(x: i32) -> i32 {
        x * x
    }
}

fn main() {
    println!("{}", math::square(5));
}

los auxiliares privados permanecen ocultos

Puede mantener privados los auxiliares internos y exponer al mismo tiempo una API pública. La función pública puede llamar a la privada, pero los usuarios externos no.

mod math {
    fn double(x: i32) -> i32 { x * 2 }
    pub fn quadruple(x: i32) -> i32 { double(double(x)) }
}

fn main() {
    println!("{}", math::quadruple(3));
}

pub oculta los campos de las estructuras

Hacer que una estructura sea pub expone el tipo, pero sus campos permanecen privados a menos que cada uno también se marque como pub.

Esto le permite controlar cómo se crea y modifica la estructura.

mod model {
    pub struct User {
        pub name: String,
        age: u32,
    }
    impl User {
        pub fn new(name: String, age: u32) -> User {
            User { name, age }
        }
        pub fn age(&self) -> u32 { self.age }
    }
}

fn main() {
    let u = model::User::new(String::from("Sam"), 28);
    println!("{} is {}", u.name, u.age());
}

¿por qué ocultar los campos?

Los campos privados hacen cumplir las invariantes. Los usuarios deben utilizar su constructor y sus métodos, por lo que puede validar las entradas y cambiar posteriormente la disposición interna sin afectar a quienes usan el código.

pub expone todas las variantes

A diferencia de las estructuras, una enumeración pub hace públicas automáticamente todas sus variantes. Las variantes no tienen una visibilidad independiente.

mod traffic {
    pub enum Light {
        Red,
        Yellow,
        Green,
    }
}

fn main() {
    let l = traffic::Light::Green;
    let go = matches!(l, traffic::Light::Green);
    println!("go = {}", go);
}

pub(crate): en todo el crate

pub(crate) hace que un elemento sea visible en todo el mismo crate, pero no para los crates externos que dependen del suyo.

Es perfecto para las API internas compartidas entre módulos.

mod config {
    pub(crate) fn default_port() -> u16 {
        8080
    }
}

fn main() {
    println!("{}", config::default_port());
}

pub(super): solo para el módulo principal

pub(super) expone un elemento únicamente al módulo principal. Es un nivel de acceso más restringido que pub.

mod outer {
    pub fn run() {
        inner::helper();
    }
    mod inner {
        pub(super) fn helper() {
            println!("visible to parent only");
        }
    }
}

fn main() {
    outer::run();
}

volver a exportar con pub use

pub use vuelve a exportar un elemento, lo que permite a los usuarios acceder a él mediante una ruta más corta o cómoda. Así puede diseñar una API pública clara.

mod deep {
    pub mod nested {
        pub fn ping() {
            println!("pong");
        }
    }
    pub use nested::ping;
}

fn main() {
    deep::ping();
}

diseñar una API pública

Exponga la superficie mínima necesaria para cumplir el objetivo. Mantenga privados los auxiliares, oculte los campos de las estructuras tras métodos y use pub(crate) para compartir elementos internamente.

Una API compacta es más fácil de evolucionar sin afectar a quienes la utilizan.

resumen de los niveles de visibilidad

Del más al menos restrictivo:

  • predeterminado (privado para el módulo)
  • pub(super) — visible para el módulo principal
  • pub(crate) — visible en todo el crate
  • pub — visible en todas partes

comprobación rápida

Compruebe sus conocimientos sobre visibilidad.

repaso

Ha aprendido a controlar el acceso:

  • Los elementos son privados de forma predeterminada; pub los expone
  • Las estructuras pub mantienen sus campos privados a menos que cada uno sea pub
  • Las enumeraciones pub exponen todas sus variantes
  • pub(crate) y pub(super) ofrecen un control más preciso
  • pub use vuelve a exportar elementos para crear una API clara

Preguntas frecuentes

¿La lección «pub y visibilidad» es gratis?

Sí — el texto completo de «pub y visibilidad» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn Rust Coding, actualiza a CoddyKit PRO. El curso de Learn Rust Coding incluye 4 lecciones en total.

¿Qué aprenderé en «pub y visibilidad»?

Controlar el acceso Practicas Learn Rust Coding con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Learn Rust Coding?

No se requiere experiencia previa. Learn Rust Coding en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «pub y visibilidad»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Learn Rust Coding?

Sí. Cada lección de Learn Rust Coding incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Módulos y mod
  2. pub y visibilidad
  3. use y rutas
  4. Crates y raíz del crate
← Volver a Learn Rust Coding