ماژولها در جولیا
ساخت ماژول با module، import و using، ساختار پروژههای جولیا
ماژول چیست؟
ماژول (Module) فضای نام مستقل است — برای سازماندهی کد و جلوگیری از تداخل نامها:
module MyMath
# توابع عمومی (قابل export)
export add, multiply
function add(a, b)
return a + b
end
function multiply(a, b)
return a * b
end
# خصوصی — بیرون دیده نمیشود
function secret()
return "مخفی!"
end
end # module
استفاده از ماژول
# using — همه export ها مستقیم
using .MyMath
println(add(2, 3)) # مستقیم!
println(multiply(4, 5))
# import — با نام ماژول
import .MyMath
println(MyMath.add(2, 3))
# فقط چیزهای خاص
using .MyMath: add
println(add(1, 1))
-- multiply(2, 2) -- ❌ import نشده!
تفاوت مهم:
using توابع exportشده را مستقیم در دسترس میگذارد، import با نام ماژول صدا میزنید!ماژولهای استاندارد
جولیا ماژولهای داخلی دارد که همیشه در دسترساند:
# بدون نیاز به using!
println(sqrt(16)) # از Base
println([1,2] .+ 1) # از Base
# ماژولهای دیگر:
using Dates
println(Dates.today())
using LinearAlgebra
println(LinearAlgebra.norm([3, 4])) # 5.0
ساختار پروژه واقعی
myproject/
├── Project.toml
├── src/
│ ├── myproject.jl # ماژول اصلی
│ ├── utils.jl
│ └── math.jl
└── test/
└── runtests.jl
-- در myproject.jl:
module myproject
include("utils.jl")
include("math.jl")
export main_function
end
include — ترکیب فایلها
module MyApp
include("helpers.jl") # محتوای helpers.jl اینجا کپی میشود
include("models.jl")
end
چرا ماژول؟
- سازماندهی: کد مرتب و قابل نگهداری
- جلوگیری از تداخل: دو تابع همنام در دو ماژول!
- کنترل دسترسی: فقط export ها عمومیاند
- بارگذاری تنبل: فقط وقتی لازم است
در ویرایشگر آنلاین ما ماژولهای چندفایله کار نمیکنند (فایلی نیست!) اما میتوانید الگوی ماژول را داخل یک فایل تمرین کنید.
این مبحث بخشی از دوره آموزش کامل جولیا است.