تبدیل نوع در لوا
تبدیل بین رشته و عدد با tonumber و tostring و تبدیل خودکار لوا
تبدیل نوع (Type Conversion)
گاهی نیاز داریم مقداری از یک نوع به نوع دیگر تبدیل کنیم — مثلاً عددی که بهصورت رشته از کاربر گرفتهایم را به عدد واقعی تبدیل کنیم تا بتوانیم با آن محاسبه کنیم.
tonumber — رشته به عدد
local n1 = tonumber("42") -- 42
local n2 = tonumber("3.14") -- 3.14
local n3 = tonumber(" 10 ") -- 10 (فاصلهها نادیده گرفته میشوند)
-- اگر تبدیل ممکن نباشد: nil
local bad = tonumber("سلام")
print(bad) -- nil
-- تبدیل از مبنای دیگر!
local hex = tonumber("FF", 16) -- 255
local bin = tonumber("1010", 2) -- 10
print(hex, bin)
tostring — هر چیزی به رشته
print(tostring(42)) -- "42"
print(tostring(3.14)) -- "3.14"
print(tostring(true)) -- "true"
print(tostring(nil)) -- "nil"
تبدیل خودکار (Coercion)
لوا در برخی موارد خودش تبدیل میکند:
-- رشته عددی + عدد = عدد!
print("10" + 5) -- 15
print("3" * "4") -- 12
-- اما الحاق، عدد را رشته میکند
print("سن: " .. 25) -- سن: 25
به تبدیل خودکار تکیه نکنید!
"10" + 5 کار میکند اما "سلام" + 5 خطا میدهد. همیشه با tonumber صریح تبدیل کنید و نتیجه را بررسی کنید.الگوی امن تبدیل
local function safeNumber(s)
local n = tonumber(s)
if n then
return n
else
return nil, "عدد معتبر نیست: " .. tostring(s)
end
end
local ok, err = safeNumber("123")
print(ok) -- 123
local bad, err2 = safeNumber("abc")
print(bad, err2) -- nil عدد معتبر نیست: abc
تبدیل عدد به رشته با فرمت
local n = 3.14159
print(tostring(n)) -- 3.14159
print(string.format("%.2f", n)) -- 3.14
print(string.format("%d", 42.7)) -- 42 (گرد میشود)
تبدیل boolean به رشته
local flag = true
print("وضعیت: " .. tostring(flag)) -- وضعیت: true
-- توجه: الحاق مستقیم boolean خطا میدهد!
-- print("وضعیت: " .. true) -- ❌ خطا!
جدول خلاصه
| از | به | روش |
|---|---|---|
| رشته عددی | عدد | tonumber("42") |
| عدد | رشته | tostring(42) |
| هر مقدار | رشته | tostring(x) |
| هگزادسیمال | عدد | tonumber("FF", 16) |
| باینری | عدد | tonumber("101", 2) |
| عدد | رشته فرمتشده | string.format("%.2f", x) |
این مبحث بخشی از دوره آموزش کامل لوا است.