Skip to content
هذا المقال لأغراض تعليمية. نشجعك على التحقق من المصادر الرسمية.

الجداول (Tables)

الجداول هي بنية البيانات الأساسية في Lua، تشبه القوائم في بايثون أو المصفوفات في جافا سكريبت. تُستخدم لتخزين البيانات المنظمة مثل الأسعار أو المواقع أو النتائج.

بناء الجدول (Constructor) definition
local t = {key1 = value1, key2 = value2, ...}
Formes alternatives
  • local<<var:t>>=<<var:value1>>,<<var:value2>>,... — جدول ذو مفاتيح رقمية متسلسلة بدءًا من 1
SymboleSignificationUnité
tاسم الجدول
يجب أن يكون اسمًا صالحًا في Lua (بدء بحرف أو شرطة سفلية)
key1المفتاح الأول
يمكن أن يكون نصيًا أو رقميًا
value1القيمة الأولى
أي نوع بيانات صالح في Lua

Exemple : في أبو ظبي، قم بإنشاء جدول لحفظ أسعار المنتجات في سوق الذهب: local gold_prices = {twenty_four_k = 245.5, eighteen_k = 187.3, fourteen_k = 132.8} → goldprices.twentyfour_k = 245.5 درهم للغرام

الوصول إلى عناصر الجدول (الترميز النقطي) definition
t.key
Formes alternatives
  • <<var:t>>[<<var:key>>] — الترميز باستخدام الأقواس المربعة، مفيد للمفاتيح التي تحتوي على مسافات أو أرقام
SymboleSignificationUnité
tاسم الجدول
يجب أن يكون الجدول قد تم تعريفه مسبقًا
keyالمفتاح
يجب أن يكون المفتاح موجودًا في الجدول

Exemple : استخراج سعر الذهب عيار 24: local price = gold_prices.twenty_four_k → 245.5 درهم للغرام

إضافة عنصر جديد إلى الجدول definition
t[new_key] = new_value
SymboleSignificationUnité
tاسم الجدول
الجدول الذي تريد تعديله
newkeyالمفتاح الجديد
يمكن أن يكون نصيًا أو رقميًا
newvalueالقيمة الجديدة
أي نوع بيانات صالح

Exemple : إضافة سعر الذهب عيار 10: gold_prices.ten_k = 98.7 → goldprices.tenk = 98.7 درهم للغرام

التر遍历 الجدول باستخدام pairs() definition
for key, value in pairs(t) do ... end
SymboleSignificationUnité
keyالمفتاح الحالي
يتم تحديثه تلقائيًا في كل تكرار
valueالقيمة الحالية
القيمة المرتبطة بالمفتاح
tالجدول المراد تكراره
يجب أن يكون جدولاً صالحاً

Exemple : طباعة جميع أسعار الذهب: for type, price in pairs(gold_prices) do print(type .. ': ' .. price .. ' درهم/غرام') end

الدوال (Functions)

الدوال هي اللبنات الأساسية في Lua. تسمح بتجميع الكود وإعادة استخدامه. يمكن تعريفها بعدة طرق.

تعريف دالة باسم definition
function name(args) ... end
SymboleSignificationUnité
nameاسم الدالة
يجب أن يكون اسمًا صالحًا في Lua
argsالمعاملات
قائمة المعاملات مفصولة بفواصل (اختياري)

Exemple : دالة لحساب سعر الذهب بناءً على الوزن: function calculate_gold_price(weight) return weight * gold_prices.twenty_four_k end

تعريف دالة مجهولة (Anonymous) definition
f = function(args) ... end
SymboleSignificationUnité
fاسم المتغير الذي يحمل الدالة
يمكن تمريره كوسيط لدوال أخرى
argsالمعاملات
قائمة المعاملات مفصولة بفواصل (اختياري)

Exemple : دالة لحساب السعر مع الخصم: local apply_discount = function(price, discount) return price * (1 - discount/100) end

استدعاء دالة definition
name(args)
SymboleSignificationUnité
nameاسم الدالة
يجب أن تكون الدالة قد تم تعريفها مسبقًا
argsالمعاملات
قائمة القيم مفصولة بفواصل

Exemple : استخدام الدالة لحساب سعر 10 غرامات ذهب: local total = calculate_gold_price(10) → 2455 درهم

هياكل التحكم (Control Structures)

تتحكم هياكل التحكم في تسلسل تنفيذ الكود في Lua. تشمل الشروط والحلقات.

الشرط if-elseif-else definition
if condition1 then ... elseif condition2 then ... else ... end
SymboleSignificationUnité
condition1الشروط الأولى
يجب أن تكون تعبيرًا منطقيًا (boolean)
condition2الشروط الثانية
اختياري

Exemple : التحقق من سعر الذهب قبل الشراء: if gold_prices.twenty_four_k < 250 then print('اشترِ!') else print('انتظر') end

الحلقة التكرارية for (محددة النطاق) definition
for i = start, end, step do ... end
SymboleSignificationUnité
iمتغير العد
يتم تحديثه تلقائيًا
startالقيمة الابتدائية
يجب أن تكون عددًا
endالقيمة النهائية
يجب أن تكون عددًا
stepالخطوة
اختياري، القيمة الافتراضية 1

Exemple : طباعة جدول الضرب للعدد 5: for i = 1, 10 do print(i .. ' × 5 = ' .. i*5) end

الحلقة التكرارية while definition
while condition do ... end
SymboleSignificationUnité
conditionالشروط
يجب أن تكون تعبيرًا منطقيًا (boolean)

Exemple : الانتظار حتى ينخفض سعر الذهب: while gold_prices.twenty_four_k > 240 do os.execute('sleep 60') end

السلاسل النصية (Strings)

توفر Lua مجموعة غنية من الدوال للتعامل مع السلاسل النصية، وهي أساسية لمعالجة البيانات النصية.

طول السلسلة definition
len = string.len(s)
Formes alternatives
  • <<var:len>> = #<<var:s>> ParseError: Expected 'EOF', got '#' at position 15: <<var:len>> = #̲<<var:s>> — الطريقة المختصرة للحصول على طول السلسلة
SymboleSignificationUnité
lenالطول
عدد الأحرف في السلسلة
sالسلسلة النصية
يجب أن تكون سلسلة نصية صالحة

Exemple : حساب طول اسم المنتج: local product_name = 'هاتف ذكي'#product_name = 8 أحرف

استخراج جزء من السلسلة definition
sub = string.sub(s, i, j)
SymboleSignificationUnité
subالجزء المستخرج
سلسلة نصية جزئية
sالسلسلة الأصلية
يجب أن تكون سلسلة نصية صالحة
iالبداية
الرقم الأول (1-based)
jالنهاية
الرقم الأخير (اختياري، إذا لم يذكر، إلى النهاية)

Exemple : استخراج الكود البريدي من عنوان في دبي: local address = 'دبي، شارع الشيخ زايد، 12345'string.sub(address, -5) = '12345'

البحث في السلسلة باستخدام النمط definition
match = string.match(s, pattern)
SymboleSignificationUnité
matchالجزء المطابق
الجزء الذي تطابق النمط
sالسلسلة الأصلية
يجب أن تكون سلسلة نصية صالحة
patternالنمط
نمط البحث (مثل '%d+' للبحث عن أرقام)

Exemple : استخراج السعر من نص: local text = 'السعر: 250 درهم'string.match(text, '%d+') = '250'

الملفات (File I/O)

تسمح Lua بقراءة وكتابة الملفات، وهو أمر أساسي لحفظ البيانات أو معالجة الملفات الخارجية.

فتح ملف definition
file = io.open(filename, mode)
SymboleSignificationUnité
fileالكائن الملف
يتم استخدامه لقراءة/كتابة الملف
filenameاسم الملف
مسار الملف (مثل 'data.txt')
modeالوضع
'r' للقراءة، 'w' للكتابة، 'a' للإلحاق

Exemple : فتح ملف لحفظ بيانات الذهب: local file = io.open('gold_prices.txt', 'w')

قراءة محتوى ملف definition
content = file:read('*a')
Formes alternatives
  • <<var:line>>=<<var:file>>:read() — قراءة سطر واحد (بدون '*a')
SymboleSignificationUnité
contentالمحتوى المقروء
جميع محتوى الملف
fileالكائن الملف
يجب أن يكون مفتوحًا للقراءة

Exemple : قراءة جميع البيانات من ملف الذهب: local data = file:read('*a')

كتابة إلى ملف definition
file:write(data)
SymboleSignificationUnité
fileالكائن الملف
يجب أن يكون مفتوحًا للكتابة
dataالبيانات المكتوبة
أي سلسلة نصية

Exemple : كتابة سعر الذهب إلى ملف: file:write('24K: 245.5\n')

إغلاق الملف definition
file:close()
SymboleSignificationUnité
fileالكائن الملف
يجب أن يكون مفتوحًا

Exemple : إغلاق ملف الذهب بعد الكتابة: file:close()

الجداول الفوقية (Metatables)

الجداول الفوقية تسمح بتعديل سلوك الجداول في Lua، مثل تعريف سلوك الجمع أو الوصول إلى المفاتيح الغير موجودة.

تعريف جدول فوقي definition
mt = {}
SymboleSignificationUnité
mtالجدول الفوقي
يتم استخدامه لتعريف السلوكيات الفوقية

Exemple : إنشاء جدول فوقي للجمع التلقائي: local mt = {}

ربط جدول فوقي بجدول definition
setmetatable(t, mt)
SymboleSignificationUnité
tالجدول المراد تعديله
الجدول الذي تريد إضافة سلوك فوقي له
mtالجدول الفوقي
الجدول الفوقي الذي يحتوي على السلوكيات

Exemple : ربط الجدول الفوقي بجدول الذهب: setmetatable(gold_prices, mt)

__index: الوصول إلى المفاتيح الغير موجودة definition
mt.__index = function(t, key) ... end
SymboleSignificationUnité
tالجدول
الجدول الذي تم الوصول إليه
keyالمفتاح
المفتاح الذي لم يوجد

Exemple : عند الوصول إلى مفتاح غير موجود، إرجاع سعر افتراضي: mt.__index = function(t, key) return 0 end

المصادر

  1. en.wikipedia.org
  2. lua.org
  3. www.moonsharp.org
  4. www.nongnu.org
  5. luau.org
  6. doi.org
  7. api.semanticscholar.org
  8. www.acm.org
  9. web.archive.org
  10. lua-users.org
  11. www.jucs.org
  12. luarocks.org
  13. github.com
  14. www.foreignaffairs.com
  15. stackoverflow.com