في هذا الموضوع سيتم شرح التالي:
العمليات الحسابية Arithmetic Operators
العوامل العلائقية Relational Operators
العوامل المنطقية Logical Operators
التسلسل أو الدمج Concatenation
معامل الطول Length Operator
معاملات الأسبقية 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)
^
اتمنى أنني وفقت في الشرح (أحياناً يصعب عليّ ترجمة بعض الكلمات)
ولأية أسئلة لديكم الرجاء تركها في التعليقات.