No meu código Julia eu uso funções de outros arquivos, adicionadas via include. Por exemplo, eu posso ter algo como
using DataFrames, CSV
import Random: shuffle, seed
using Base.Filesystem: mkpath
include("existing_code.jl")
seed!(2025)
O código existing_code.jl
pode, no entanto, já incluir algo como
using DataFrames, CSV, Random
using Base.Filesystem: mkpath
Random.seed!(1984)
No entanto, minha impressão é que, como os módulos (como DataFrames, CSV, Random
já estão importados no outro arquivo, não há necessidade de importá-los novamente. Gostaria de saber qual é uma boa prática aqui? E quais são os possíveis perigos de não seguir as boas práticas?
A
include(...)
função executa um arquivo dado, como se o conteúdo do arquivo fosse simplesmente copiado e colado onde ainclude
chamada está. Desse ângulo, fica claro ver que você está executando essasusing
chamadas várias vezes, e eu concordo que você não precisa reimportar os módulos na segunda vez.No caso em que você sabe que os módulos necessários serão carregados em existing_code.jl , então é melhor evitar a importação repetida e simplesmente omitir as três primeiras linhas do seu arquivo. O benefício é que as verificações desnecessárias levam tempo (embora não muito tempo). Se a documentação for uma preocupação, considere deixar um comentário sobre quais módulos são importados na chamada include.
Parece, com base no seu uso de "may" e "might", que é possível que o arquivo importado não inclua os módulos necessários. Nesse caso, os
using
s são necessários. Com essa expectativa, há duas opções. Uma é fazer o que você fez: tentar importar os módulos novamente, sempre. A desvantagem é que às vezes é desnecessário. A segunda opção é verificar cada importação para decidir se importa ou não. Isso pode ser algo como:Se você estiver disposto a revisar um pouco seu projeto, muitos considerariam a melhor prática criar um novo módulo, no qual o arquivo homônimo poderia importar todos os módulos necessários, que seriam então utilizáveis por seus vários métodos. Bom resumo aqui: https://discourse.julialang.org/t/best-practise-organising-code-in-julia/74362/2