عملگرها در لوا

عملگرهای حسابی، مقایسه‌ای، منطقی، الحاق، طول و اولویت عملگرها

عملگر چیست؟

عملگر (Operator) نمادی است که روی مقادیر عملیات انجام می‌دهد. لوا عملگرهای ساده و تمیزی دارد.

عملگرهای حسابی

عملگرکارمثال
+جمع5 + 3 → 8
-تفریق5 - 3 → 2
*ضرب5 * 3 → 15
/تقسیم5 / 2 → 2.5
//تقسیم صحیح5 // 2 → 2
%باقیمانده5 % 2 → 1
^توان2 ^ 3 → 8
-منفی یکانی-5

عملگرهای مقایسه‌ای

عملگرمعنیمثال
==مساوی5 == 5 → true
~=نامساوی5 ~= 3 → true
<کوچک‌تر3 < 5 → true
>بزرگ‌تر3 > 5 → false
<=کوچک‌تر یا مساوی5 <= 5 → true
>=بزرگ‌تر یا مساوی3 >= 5 → false
در لوا عملگر نامساوی ~= است، نه !=! این یکی از تفاوت‌های مهم با C و جاوااسکریپت است.

عملگرهای منطقی

سه عملگر: and، or، not

print(true and false)   -- false
    print(true or false)    -- true
    print(not true)         -- false

رفتار خاص and/or در لوا (Short-circuit)

این عملگرها همیشه true/false برنمی‌گردانند — یکی از مقادیر را برمی‌گردانند:

-- and: اگر اولی نادرست بود، همان اولی؛ وگرنه دومی
    print(nil and 5)     -- nil
    print(false and 5)   -- false
    print(10 and 5)      -- 5
    
    -- or: اگر اولی درست بود، همان اولی؛ وگرنه دومی
    print(nil or 5)      -- 5
    print(false or "پیش‌فرض")  -- پیش‌فرض
    print(10 or 5)       -- 10

ترفند مقدار پیش‌فرض

local function greet(name)
      name = name or "مهمان"   -- اگر name نادرست بود، "مهمان"
      return "سلام " .. name
    end
    
    print(greet("علی"))   -- سلام علی
    print(greet())        -- سلام مهمان

عملگر الحاق و طول

print("سلام" .. " " .. "دنیا")   -- الحاق
    print(#"hello")                    -- 5 (طول)
    print(#{10, 20, 30})               -- 3 (طول جدول)

اولویت عملگرها

از بالا (بیشترین اولویت) به پایین:

  1. ^ (توان)
  2. not, #, unary -
  3. *, /, //, %
  4. +, -
  5. .. (الحاق)
  6. <, >, <=, >=, ~=, ==
  7. and
  8. or
print(2 + 3 * 4)        -- 14 (اول ضرب)
    print((2 + 3) * 4)      -- 20 (پرانتز اولویت را عوض می‌کند)
وقتی مطمئن نیستید، از پرانتز استفاده کنید! (a or b) and c همیشه واضح‌تر از a or b and c است.

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

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