As formas de adopt
Seis formas, e o que cada uma muda — inclusive a que traz qualquer biblioteca do Python.
adopt é uma palavra e seis formas. A escolha entre elas não é estilo: ela decide o que o leitor do arquivo consegue saber sem sair dele.
dataforge
// 1. O modulo inteiro, com o nome dele.
adopt Arcane.Math
// 2. Com apelido — o mais comum, e o que encurta sem esconder.
adopt Arcane.Math as M
// 3. So o que se usa.
adopt Arcane.Math.{sqrt, floor}
// 4. So o que se usa, renomeando.
adopt {sqrt as raiz} from Arcane.Math
out M.PI
out sqrt(16.0)
out raiz(25.0)
assert floor(3.7) is 3| Forma | Quando | O que ela custa |
|---|---|---|
adopt X | uso raro, nome curto | o nome inteiro em cada chamada |
adopt X as M | o padrão | nada; o apelido diz de onde veio |
adopt X.{a, b} | duas ou três funções muito usadas | quem lê sqrt(x) não sabe de onde ele vem |
adopt {a as b} from X | quando o nome colide | idem, mais o nome trocado |
adopt ./vizinho | arquivo do próprio projeto | o caminho é relativo a este arquivo |
adopt Python.numpy | biblioteca do Python | a dependência deixa de ser zero |
Caminhos relativos#
dataforge
// 'adopt ./x' procura ao lado DESTE arquivo — e nao da pasta em
// que o programa foi executado. A diferenca aparece quando o mesmo
// modulo e importado de duas profundidades.
//
// projeto/
// src/
// main.df adopt ./modelos
// modelos.df
// admin/
// painel.df adopt ../modelos
//
// E o hifen funciona: 'adopt ./minha-lib as L'. O lexer entrega o
// hifen como MINUS, e o caminho so o cola ao nome quando as colunas
// sao ADJACENTES — sem essa guarda, 'a - b' viraria um arquivo
// chamado 'a-b'.
out "o caminho e relativo ao arquivo, e nao ao diretorio de trabalho"A ponte para o Python#
Python é espaço de nomes reservado, resolvido antes da biblioteca e dos arquivos vizinhos — um Python.df no disco não sequestra o import.
dataforge
// adopt Python.numpy as np
//
// A ponte NAO CONVERTE: um 'ndarray' continua um 'ndarray', e
// 'a * 2' e a conta vetorizada do numpy, e nao um laco sobre um
// milhao de posicoes. Isso so funciona porque o interpretador trata
// objeto estranho por PROTOCOLO — membro, metodo, indice, 'len',
// iteracao, aritmetica, texto e verdade.
out "a ponte existe, e a dependencia passa a ser sua"