رشته‌ها در لوا

تعریف رشته، کاراکترهای escape، طول رشته، ایندکس و برش رشته

رشته چیست؟

رشته (String) دنباله‌ای از کاراکترهاست — مثل نام، جمله یا هر متن دیگری. در لوا رشته‌ها تغییرناپذیر (immutable) هستند: هر عملی روی رشته، رشته جدیدی می‌سازد.

تعریف رشته

سه راه برای تعریف رشته در لوا:

local s1 = "نقل‌قول دوتایی"
    local s2 = 'نقل‌قول تک‌گانه'
    local s3 = [[رشته بلند
    که می‌تواند چند خط باشد
    بدون نیاز به escape]]
رشته‌های [[ ]] برای متن‌های چندخطی عالی هستند — مثل پیام‌های طولانی یا HTML.

کاراکترهای Escape

Escapeمعنی
\nخط جدید
\tتب
\\علامت بک‌اسلش
\"نقل‌قول دوتایی
\'نقل‌قول تک‌گانه
print("خط اول\nخط دوم")
    print("ستون۱\tستون۲")
    print("او گفت: \"سلام\"")

الحاق رشته‌ها

برای چسباندن دو رشته از عملگر .. استفاده می‌شود:

local first = "علی"
    local last = "رضایی"
    local full = first .. " " .. last
    print(full)   -- علی رضایی
    
    -- اعداد هم خودکار به رشته تبدیل می‌شوند
    local msg = "سن: " .. 25
    print(msg)    -- سن: 25
حواستان باشد بین دو نقطه الحاق و اعداد فاصله بگذارید: 1 .. 2 درست است اما 1..2 مبهم است و خطا می‌دهد!

طول رشته با #

local s = "سلام دنیا"
    print(#s)          -- 9 (تعداد بایت‌ها)
    
    local empty = ""
    print(#empty)      -- 0
عملگر # تعداد بایت‌ها را می‌شمارد، نه کاراکترها! برای متن فارسی (UTF-8) هر حرف ممکن است ۲ بایت باشد. برای شمارش کاراکترهای فارسی از utf8.len() استفاده کنید.

دسترسی به کاراکترها

برای گرفتن کد کاراکتر در یک موقعیت:

local s = "hello"
    print(s:sub(1, 1))        -- h (کاراکتر اول)
    print(string.byte(s, 1))  -- 104 (کد ASCII حرف h)
    print(string.char(104))   -- h (برعکس)

برش رشته (substring)

متد sub بخشی از رشته را برمی‌گرداند:

local s = "برنامه‌نویسی لوا"
    print(s:sub(1, 6))    -- ۶ کاراکتر اول
    print(s:sub(-3))      -- ۳ کاراکتر آخر
    print(s:sub(4))       -- از کاراکتر ۴ تا آخر

رشته‌ها تغییرناپذیرند

local s = "لوا"
    -- s[1] = "د"   -- ❌ خطا! نمی‌توان رشته را تغییر داد
    
    -- راه درست: ساخت رشته جدید
    s = "د" .. s:sub(2)
    print(s)   -- دوآ (نمایشی)

تبدیل رشته به عدد و برعکس

local num = tonumber("42")       -- 42 (عدد)
    local str = tostring(42)        -- "42" (رشته)
    
    print("42" + 8)                 -- 50 (لوا خودکار تبدیل می‌کند!)
    print("3.14" * 2)               -- 6.28

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

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