في هذا الموضوع سيتم شرح التالي:

  1. العمليات الحسابية Arithmetic Operators

  2. العوامل العلائقية Relational Operators

  3. العوامل المنطقية Logical Operators

  4. التسلسل أو الدمج Concatenation

  5. معامل الطول Length Operator

  6. معاملات الأسبقية Precedence

العمليات الحسابية

لوا تدعم مشغلي الحسابات الثنائية المعتادة أو (binary arithmetic operators):

 +  (addition)          -  (subtraction)
 *  (multiplication)    /  (division)
 %  (modulo)            ^  (exponentiation)

لو تدعم أيضا علامة السالب الأحادي -

إذا كانت المعاملات أرقام numbers أو متسلسلات strings يمكن تحويلها إلا أرقام، جميع العمليات لها المعنى المعتاد. العمليات الأسيّة ستعمل لأي محتوى اُسي. على سبيل المثال:

x^(-0.5)

يحسب معكوس الجذر التربيعي إلى

x

مودولو Modulo يعرّف كـ

a % b == a - math.floor(a/b)*b

كما هو الحال في ما تبقى من حاصل القسمة وهو تقريب حاصل نحو ناقص ما لا نهاية.

العوامل العلائقية

العمليات العلائقية في لوا هي:

 ==  (equal to)
 ~=  (not equal to)
 <   (less than)
 >   (greater than)
 <=  (less than or equal to)
 >=  (greater than or equal to)

جميع هذه العمليات تؤدي دائما في نتيجة صحيحة true أو خاطئة false

علامة المساواة (==) أولا تقارن نوع المعاملات. إذا كانت من أنواع مختلفة، ستكون النتيجة خاطئة false وإلا، سيتم مقارنة قيم المعاملات.

تتم مقارنة الأرقام numbers والمتسلسلات strings بالطريقة المعتادة. ومقارنة الكائنات objects بالرجوع إلى المصدر reference: يعتبر كائنين متساويين إلا إذا كانوا نفس الكائن. في كل مرة تقوم بإنشاء كائن جديد، هذا الكائن يختلف عن أي كائن موجود سابقاً.

لا تنطبق قواعد التحويل التلقائي إلى مقارنات المساواة. لذلك فإن

"0" == 0

سيقيم إلى false

العوامل المنطقية

العوامل المنطقية في لوا هي:

  • and
  • or
  • not

كل نتائج العوامل المنطقية التي تنتج إما false أو nil ستنتج أو تعتبر دائماً كـ false وأي شيء آخر على سيكون true

  • "and" تنتج أول مقارن إذا كان هو false أو nil، وإلا تنتج المقارن الثاني (انظر المثال بالاسفل)

  • "or" تنتج أول مقارن إذا كان هو false أو nil، وإلا تنتج المقارن الثاني (انظر المثال بالاسفل)

  • "not" دائماً تنتج إما false أو true

شاهد الأمثلة للتضح لك الصورة جلية:

10 or 20           --> 10
10 or error()      --> 10
nil or "a"         --> "a"
nil and 10         --> nil
false and error()  --> false
false and nil      --> false
false or nil       --> nil
10 and 20          --> 20

التسلسل (Concatenation)

التسلسل أو تضمين أكثر من متسلسلة strings مع بعضهم البعض في لوا يمكن فعله بواسطة نقطتين (..) إذا كانت المعاملات متسلسلات أو أرقام، سيتم تحويلهما إلى متسلسة واحدة كالتالي:

local s = "foo".."10"

معامل الطول (Length Operator)

يمكن من حساب طول المتسلسة بواسطة علامة الترقيم (#) طول المتسلسة هو عدد البايت bytes الذي فيها — وبصورة أخرى عدد الأحرف إذا كانت باللغة الإنجليزية.

طول جدول/المصفوفة table يحدد عن طريق العناصر التي به على سبيل المثال

t[n] 

معاملات الأسبقية Precedence

المعاملات للأسبقية أو المقارنة في لوا بالأسفل مرتبة من أدنى إلى أعلى الأولوية:

or
and
<     >     <=    >=    ~=    ==
 ..
 +     -
 *     /     %
 not   #     - (unary)
 ^

اتمنى أنني وفقت في الشرح (أحياناً يصعب عليّ ترجمة بعض الكلمات)

ولأية أسئلة لديكم الرجاء تركها في التعليقات.