ورقة Lua المرجعية
آخر تحديث
Hello World وتشغيل الكود
Lua بسيطة - عبارة واحدة تعمل.
| العملية | الصياغة |
|---|---|
| طباعة سطر | print("Hello, World!") |
| طباعة عدة قيم | print("x", 1, true) |
| الكتابة دون سطر جديد | io.write("Hi") |
| تعليق | -- this is a comment |
| تعليق متعدد الأسطر | --[[ ... ]] |
| دمج السلاسل النصية | print("Hi " .. name) |
| تشغيل ملف | lua app.lua |
| صدفة تفاعلية | lua |
المتغيرات والأنواع
المتغيرات عامة افتراضيًا؛ عرّف المحلية بـ local.
| العملية | الصياغة |
|---|---|
| متغير محلي | local age = 30 |
| متغير عام | count = 0 |
| إسناد متعدد | local a, b = 1, 2 |
| الأنواع الثمانية | nil, boolean, number, string, table, function, userdata, thread |
| Nil / القيم المنطقية | nil, true, false |
| فحص النوع | type(x) يُرجع "number" |
| التحويل إلى رقم | tonumber("42") |
| التحويل إلى سلسلة نصية | tostring(42) |
السلاسل النصية
السلاسل النصية غير قابلة للتغيير؛ وتعمل علامتا الاقتباس المفردة والمزدوجة.
| العملية | الصياغة |
|---|---|
| الطول | #s أو string.len(s) |
| الدمج | s1 .. s2 |
| الأحرف الكبيرة / الصغيرة | s:upper(), s:lower() |
| سلسلة فرعية | s:sub(1, 3) |
| إيجاد سلسلة فرعية | s:find("ell") |
| الاستبدال (gsub) | s:gsub("a", "b") |
| التنسيق | string.format("%05d", 42) |
| سلسلة نصية طويلة | [[ multi\nline ]] |
الجداول (هيكل البيانات الأساسي)
الجداول هي النوع المهيكل الوحيد في Lua - تعمل كمصفوفات وخرائط وكائنات.
| العملية | الصياغة |
|---|---|
| جدول فارغ | local t = {} |
| بنمط المصفوفة (يبدأ من 1) | local t = {10, 20, 30} |
| الوصول إلى عنصر مصفوفة | t[1] (العنصر الأول) |
| جدول بنمط الخريطة | local u = {name = "Ada", age = 30} |
| الوصول إلى قيمة خريطة | u.name أو u["name"] |
| تعيين قيمة | t[4] = 40, u.email = "a@x.com" |
| طول الجزء المصفوفي | #t |
| التكرار على المصفوفة (ipairs) | for i, v in ipairs(t) do ... end |
| التكرار على كل المفاتيح (pairs) | for k, v in pairs(u) do ... end |
| جدول متداخل | local m = {a = {1, 2}} |
التحكم في التدفق
الكتل تُغلَق بـ end؛ و nil و false فقط هما القيمتان الكاذبتان.
| العملية | الصياغة |
|---|---|
| If / elseif / else | if x > 0 then ... elseif x < 0 then ... else ... end |
| العوامل المنطقية | and, or, not |
| for رقمية | for i = 1, 10 do ... end |
| For بخطوة | for i = 10, 1, -1 do ... end |
| حلقة while | while x < 100 do ... end |
| Repeat-until | repeat ... until done |
| Break | break |
| عامل عدم المساواة | if a ~= b then ... end |
الدوال
الدوال قيم من الدرجة الأولى ويمكنها إرجاع نتائج متعددة.
| العملية | الصياغة |
|---|---|
| تعريف دالة | function add(a, b) return a + b end |
| دالة محلية | local function square(x) return x * x end |
| دالة مجهولة الاسم | local f = function(x) return x * 2 end |
| قيم إرجاع متعددة | function bounds() return 1, 10 end |
| التقاط إرجاعات متعددة | local lo, hi = bounds() |
| دالة متغيرة الوسائط | function sum(...) ... end |
| جمع الوسائط المتغيرة | local args = {...} |
| دالة (صياغة النقطتين) | function obj:greet() ... end |
مكتبة السلاسل النصية
دوال شائعة من مكتبة السلاسل النصية (قابلة للنداء كـ s:fn()).
| الدالة | وظيفتها |
|---|---|
string.len(s) | طول السلسلة النصية |
string.sub(s, i, j) | سلسلة فرعية من الفهرس i إلى j |
string.upper(s) | نسخة بأحرف كبيرة |
string.rep(s, n) | تكرار السلسلة النصية n مرة |
string.find(s, p) | إيجاد نمط، يُرجع البداية/النهاية |
string.match(s, p) | إرجاع أول مطابقة للنمط |
string.gsub(s, p, r) | استبدال كل مطابقات النمط |
string.format(fmt, ...) | تنسيق القيم في سلسلة نصية |
مكتبتا الجداول والرياضيات
مساعدات للعمل مع الجداول بنمط المصفوفة والأرقام.
| الدالة | وظيفتها |
|---|---|
table.insert(t, v) | إلحاق قيمة في النهاية |
table.insert(t, i, v) | إدراج v في الموضع i |
table.remove(t, i) | إزالة وإرجاع العنصر عند i |
table.concat(t, ", ") | دمج العناصر في سلسلة نصية |
table.sort(t) | ترتيب المصفوفة في المكان |
math.floor(x) / math.ceil(x) | التقريب لأسفل / لأعلى |
math.max(...) / math.min(...) | أكبر / أصغر وسيط |
math.random(1, 6) | عدد صحيح عشوائي ضمن نطاق |
الجداول الوصفية (باختصار)
تتيح لك الجداول الوصفية تخصيص سلوك الجداول - العوامل والفهرسة وغيرها.
| العملية | الصياغة |
|---|---|
| تعيين جدول وصفي | setmetatable(t, mt) |
| الحصول على جدول وصفي | getmetatable(t) |
| احتياطي للمفاتيح المفقودة | mt.__index = defaults |
| الافتراضي عبر دالة | mt.__index = function(t, k) ... end |
| تخصيص الجمع | mt.__add = function(a, b) ... end |
| تخصيص tostring | mt.__tostring = function(t) ... end |
| برمجة كائنية بنمط النماذج الأولية | mt.__index = ClassTable |
صياغة Lua التي تستخدمها أكثر من غيرها، على صفحة واحدة. ورقة Lua المرجعية هذه هي مرجع سريع للّغة الأساسية - المتغيرات والأنواع، والسلاسل النصية، والتحكم في التدفق، والدوال، والجداول التي تعمل كهيكل البيانات الوحيد والمرن في Lua، بالإضافة إلى لمحة عن المكتبات القياسية والجداول الوصفية.
كل ما هنا هو Lua قياسية تعمل على مفسّر اعتيادي. انسخ ما تحتاجه، أو جرّب كل مقطع برمجي مباشرة في playground الخاص بـ Lua - دون الحاجة إلى أي تثبيت.
الأسئلة الشائعة حول ورقة Lua المرجعية
هل ورقة Lua المرجعية هذه مجانية؟
كيف يمكن لجدول Lua أن يكون مصفوفة وخريطة معًا؟
{10, 20, 30}) يتصرّف الجدول كمصفوفة؛ وعندما تستخدم مفاتيح نصية ({name = "Ada"}) يتصرّف كخريطة. ويمكنك حتى مزج الاثنين في الجدول نفسه. ولهذا تحتاج Lua إلى نوع مهيكل واحد فقط - فالجدول يغطّي المصفوفات والقواميس والمجموعات والكائنات.لماذا تستخدم Lua الفهرسة التي تبدأ من 1؟
t[1] هو العنصر الأول و #t هو العدد. ويفترض عامل الطول # ودوال المكتبة مثل table.insert و ipairs جميعها هذا العُرف الذي يبدأ من 1، لذا فإن الالتزام به يُبقي كود مصفوفاتك يعمل كما هو متوقّع.