Pular para o conteúdo

18 · Módulos

Visibilidade e pub

`pub` exporta um item; sem `pub` ele é privado ao módulo.

Nesta página

Em Zolo, tudo que não é marcado com pub é privado ao arquivo onde foi declarado. Outro módulo que importar o arquivo só enxerga os itens públicos — funções, constantes, structs, enums, traits e newtypes seguem a mesma regra.

O módulo de suporte lib_demo.zolo ilustra isso bem: greet, add, sub, get_pi e VERSION são públicos; internal_helper não tem pub e permanece invisível para fora:

Apenas os itens marcados pub aparecem na lista de use. Tentar importar internal_helper causaria um erro de compilação.

04-pub-vs-private.zolo
Playground
// Feature: visibility — `pub` exports, no `pub` is private
// Syntax: `pub fn`, `pub const`, `pub struct`, etc. make the
// item visible to other modules. Without `pub`, it is restricted to
// the file.
// When to use: encapsulate internal details, expose only the API.

mod lib_demo

// Only the public API is importable.
use lib_demo::{greet, add, get_pi, VERSION}

fn main() {
  greet("public api")
  print("add(1,2) = {add(1, 2)}")
  print("pi = {get_pi()}")
  print("version = {VERSION}")
  // expected:
  // Hello, public api!
  // add(1,2) = 3
  // pi = 3.14159
  // version = 1.0.0

  // Note: `internal_helper` is in lib_demo.zolo WITHOUT `pub`,
  // so it cannot be imported or called from here.
  // Trying `use lib_demo::internal_helper` or
  // `lib_demo::internal_helper()` is a design error — the
  // function belongs only to the module.
}

A regra é simples: se você quer que outros arquivos usem um item, adicione pub. Se ele é detalhe de implementação, não adicione — o compilador vai recusar qualquer tentativa de acesso externo.

pub const VERSION exporta a constante. const VERSION (sem pub) ficaria oculta — mesmo que esteja em lib_demo.zolo, nenhum outro arquivo poderia referenciá-la.

Veja também

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enespt-br