فرمتبندی رشته در لوا
تابع string.format و الگوهای %d، %s، %f برای ساخت رشتههای قالببندیشده
چرا فرمتبندی؟
الحاق با .. برای موارد ساده خوب است، اما وقتی میخواهید رشتهای منظم با اعداد، اعشار و ترازبندی بسازید، string.format بهترین ابزار است — مثل printf در زبان C:
local name = "علی"
local age = 25
-- با الحاق:
print("نام: " .. name .. ", سن: " .. age)
-- با format (تمیزتر!):
print(string.format("نام: %s، سن: %d", name, age))
الگوهای رایج
| الگو | برای | مثال |
|---|---|---|
%d | عدد صحیح | string.format("%d", 42) → 42 |
%f | عدد اعشاری | string.format("%f", 3.14) → 3.140000 |
%.2f | اعشار با ۲ رقم | string.format("%.2f", 3.14159) → 3.14 |
%s | رشته | string.format("%s", "سلام") → سلام |
%q | رشته امن برای لوا | با escape |
%x | هگزادسیمال | string.format("%x", 255) → ff |
%% | علامت % | "100%%" → 100% |
عرض و ترازبندی
میتوانید عرض مینیمم تعیین کنید — عالی برای جدولها:
-- %10d : عدد در فضای ۱۰ کاراکتری (راستچین)
print(string.format("|%10d|", 42)) -- | 42|
-- %-10s : رشته در فضای ۱۰ کاراکتری (چپچین)
print(string.format("|%-10s|", "lua")) -- |lua |
مثال عملی: جدول ضرب
for i = 1, 5 do
print(string.format("%2d × %2d = %3d", i, i, i * i))
end
مثال عملی: نمایش پول
local prices = {1500, 250000, 99.99}
for _, price in ipairs(prices) do
print(string.format("قیمت: %,.2f تومان", price))
end
مثال عملی: درصد پیشرفت
local function progress(current, total)
local pct = (current / total) * 100
return string.format("پیشرفت: %.1f%%", pct)
end
print(progress(3, 4)) -- پیشرفت: 75.0%
print(progress(1, 3)) -- پیشرفت: 33.3%
برای اعداد اعشاری همیشه از
%.Nf استفاده کنید تا خروجی قابلپیشبینی باشد — %f پیشفرض ۶ رقم اعشار نشان میدهد!این مبحث بخشی از دوره آموزش کامل لوا است.