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 principalpub(crate)— visible en todo el cratepub— 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;
publos expone - Las estructuras
pubmantienen sus campos privados a menos que cada uno seapub - Las enumeraciones
pubexponen todas sus variantes pub(crate)ypub(super)ofrecen un control más precisopub usevuelve 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
- Módulos y mod
- pub y visibilidad
- use y rutas
- Crates y raíz del crate