Pular para o conteúdo

Importar módulos

adopt: stdlib, arquivo ao lado, caminho relativo e pacote.

As formas#

dataforge
adopt Arcane.Math as M              // biblioteca padrão
adopt validador as V                // pacote instalado
adopt ./util as U                   // arquivo ao lado
adopt ./lib/formato as F            // numa subpasta
adopt ../compartilhado/config as C  // subindo
adopt "src/legado.df" as L          // caminho literal

Importar só o que usa#

dataforge
adopt Arcane.Math.{sqrt, floor}     // forma compacta
adopt {sqrt as raiz} from Arcane.Math
adopt ./util.{dobro, VERSAO}

O nome entra direto no escopo — sqrt(16), não Math.sqrt(16). Útil para o que se usa muito; para o resto, o prefixo documenta de onde veio.

Onde o adopt procura#

Nesta ordem:

  • Biblioteca padrãoArcane.* e os nomes curtos (Math, IO, Text)
  • Ao lado do arquivo que faz o import, não do diretório de onde se rodou
  • `forge_modules/`, subindo até achar um forge.toml

Exportar#

dataforge
action publica():
    yield interna() * 2

action interna():
    yield 21

relay publica          // 'interna' fica dentro do módulo

Sem nenhum relay, o módulo exporta tudo o que definiu no topo — conveniente para script. Num pacote, declare explicitamente: é o que separa a API do detalhe.

Fachada#

dataforge
// lib/index.df
relay from ./util
relay from ./mat

// app.df
adopt ./lib/index as Lib      // uma API só, vários módulos dentro

relay from re-exporta tudo o que aquele módulo exporta. É o que permite quebrar a implementação em vários arquivos sem que quem consome precise saber disso. O nome local vence o re-exportado.

Ciclos#

Dois módulos que se importam são detectados, com o caminho completo:

text
erro[DF0501]: Circular import: b.df → a.df → b.df.
              Break the cycle by moving the shared part into a third module.

Tipos vindos de módulo#

dataforge
adopt ./tipos as T

p := T.Ponto(1, 2)          // record
c := spawn T.Caixa(7)       // blueprint
out T.Cor.Azul              // enum
out T.dobro(21)             // ação