ماژول‌ها در لوا

ساخت ماژول با require، الگوهای ماژول‌نویسی و سازماندهی کد

ماژول چیست؟

ماژول (Module) فایلی از کد است که می‌تواند با require در جای دیگر بارگذاری شود. ماژول‌ها کد را سازماندهی و قابل استفاده مجدد می‌کنند.

require — بارگذاری ماژول

-- بارگذاری کتابخانه‌های استاندارد
local math = require("math")
local string = require("string")

-- بارگذاری فایل محلی (مثلاً mylib.lua)
local mylib = require("mylib")
require هر ماژول را فقط یک بار بارگذاری می‌کند و نتیجه را cache می‌کند — requireهای بعدی همان جدول را برمی‌گردانند.

ساخت ماژول — الگوی ۱: جدول ساده

-- فایل: mymath.lua
local mymath = {}

function mymath.add(a, b)
  return a + b
end

function mymath.multiply(a, b)
  return a * b
end

return mymath
-- فایل: main.lua
local mymath = require("mymath")

print(mymath.add(2, 3))       -- 5
print(mymath.multiply(4, 5))  -- 20

الگوی ۲: ماژول با متغیر خصوصی

-- فایل: counter.lua
local count = 0   -- خصوصی! بیرون دیده نمی‌شود

local counter = {}

function counter.increment()
  count = count + 1
  return count
end

function counter.get()
  return count
end

return counter

الگوی ۳: ماژول تابعی

-- فایل: utils.lua
local function repeatString(s, n)
  return string.rep(s, n)
end

local function clamp(v, min, max)
  return math.max(min, math.min(v, max))
end

return {
  repeatString = repeatString,
  clamp = clamp,
}

ساختار پروژه ماژولار

myproject/
├── main.lua
└── lib/
    ├── utils.lua
    ├── mymath.lua
    └── game/
        └── player.lua

-- در main.lua:
local utils = require("lib.utils")
local player = require("lib.game.player")

ماژول‌های استاندارد لوا

ماژولکار
stringکار با رشته‌ها
tableکار با جدول‌ها
mathتوابع ریاضی
osسیستم‌عامل (زمان، تاریخ)
ioورودی/خروجی فایل
coroutineکوروتین‌ها
در ویرایشگر آنلاین ما require فایل خارجی کار نمی‌کند (فایلی وجود ندارد!) اما الگوهای ماژول را می‌توانید داخل یک فایل تمرین کنید — همان‌طور که در مثال‌ها می‌بینید.

این مبحث بخشی از دوره آموزش کامل لوا است.

ابزارهای مرتبط