Learn in 10 minutes

Learn in 10 minutes

تعلم Lua في 10 دقائق

Lua هي لغة برمجة خفيفة الوزن، مثالية للتضمين في التطبيقات الأخرى. هل تعلم أنها تستخدم في ألعاب مثل ‘World of Warcraft’ و Roblox؟

1. أول برنامج في Lua

لنبدأ بالأساسيات. أنشئ ملف hello.lua واكتب:

print("Hello, World!")

احفظه وشغّل في الطرفية:

lua hello.lua

سترى:

Hello, World!

انظر كم هو سهل! print() تعرض النص على الشاشة.

2. بناء الجملة الأساسي

بناء جملة Lua بسيط جدًا:

-- هذا تعليق من سطر واحد
print("مرحبًا بالعالم!")

--[[
هذا تعليق
متعدد الأسطر
]]

نقاط مهمة:

  • التعليقات: سطر واحد --، متعدد --[[ ]]
  • الجمل: جملة واحدة لكل سطر، لا需要 فاصلة منقوطة
  • الحساسية: Lua تميز بين الأحرف الكبيرة والصغيرة

3. المتغيرات وأنواع البيانات

Lua ديناميكية، لا داعي للإعلان عن الأنواع:

-- تعيين مباشر
اسم = "Lua"
عمر = 25
رائع = true
باي = 3.14159

-- تعيين متعدد
x, y, z = 10, 20, 30

-- القيمة الفارغة هي nil
فارغ = nil

print("الاسم:", اسم)
print("العمر:", عمر)
print("رائع؟:", رائع)

أنواع البيانات في Lua:

  • nil: لا قيمة
  • boolean: true أو false
  • number: أرقام (صحيحة وكسور)
  • string: نصوص
  • table: بنية البيانات العالمية في Lua
  • function: دوال (كائنات من الدرجة الأولى)
  • userdata: لـ C
  • thread: كوروتينات

4. التعامل مع النصوص

-- إنشاء نصوص
str1 = "مرحبًا"
str2 = 'العالم'
str3 = [[نص
متعدد الأسطر]]

-- ربط النصوص بـ ..
رسالة = str1 .. " " .. str2
print(رسالة)  -- الإخراج: مرحبًا العالم

-- الطول بـ #
طول = #"مرحبًا"
print(طول)   -- الإخراج: 6

-- دوال النص
نص = "hello world"
كبير = نص:upper()
صغير = نص:lower() 
جزء = نص:sub(1, 5)

print(كبير)    -- الإخراج: HELLO WORLD
print(جزء)      -- الإخراج: hello

5. الجداول - الحاوية العالمية

الجداول هي أفضل ميزة في Lua:

-- كمجموعة (الفهارس من 1)
فواكه = {"تفاح", "موز", "كرز"}
print(فواكه[1])  -- الإخراج: تفاح
print(فواكه[2])  -- الإخراج: موز

-- كقاموس
شخص = {
    اسم = "أحمد",
    عمر = 30,
    مدينة = "القاهرة"
}
print(شخص.اسم)    -- الإخراج: أحمد
print(شخص["عمر"])  -- الإخراج: 30

--混合 أيضًا يعمل
جدولمختلط = {
    "تفاح",
    "موز", 
    لون = "أحمر",
    كمية = 5
}

-- عمليات الجداول
فواكه = {"تفاح", "موز"}
table.insert(فواكه, "كرز")  -- إضافة للنهاية
table.insert(فواكه, 2, "برتقال") -- إدخال في الموضع

print(table.concat(فواكه, ", "))  -- الإخراج: تفاح, برتقال, موز, كرز

6. هياكل التحكم

-- if
عمر = 18

if عمر >= 18 then
    print("أنت بالغ")
elseif عمر >= 13 then
    print("أنت مراهق")
else
    print("أنت طفل")
end

-- while
عداد = 1
while عداد <= 5 do
    print("العداد:", عداد)
    عداد = عداد + 1
end

-- for رقمي
for i = 1, 5 do
    print("الرقم:", i)
end

-- for بخطوة
for i = 10, 1, -2 do
    print("العد التنازلي:", i)
end

-- for للجداول
فواكه = {"تفاح", "موز", "كرز"}
for index, fruit in ipairs(فواكه) do
    print(index, fruit)
end

شخص = {اسم = "أحمد", عمر = 30}
for مفتاح, قيمة in pairs(شخص) do
    print(مفتاح, قيمة)
end

7. الدوال

-- دالة أساسية
function ترحيب(اسم)
    return "مرحبًا, " .. اسم .. "!"
end

رسالة = ترحيب("فاطمة")
print(رسالة)  -- الإخراج: مرحبًا, فاطمة!

--多个返回值
function حساب(a, b)
    return a + b, a - b, a * b, a / b
end

مجموع, فرق, حاصلضرب, ناتجقسمة = حساب(10, 5)
print("المجموع:", مجموع)        -- الإخراج: المجموع: 15
print("الفرق:", فرق) -- الإخراج: الفرق: 5

-- دالة مجهولة (lambda)
ضرب = function(x, y)
    return x * y
end

نتيجة = ضرب(4, 5)
print(نتيجة)  -- الإخراج: 20

-- دوال كمعاملات
function تنفيذعملية(x, y, عملية)
    return عملية(x, y)
end

نتيجة = تنفيذعملية(6, 7, ضرب)
print(نتيجة)  -- الإخراج: 42

8. الوحدات

نظم الكود في وحدات. أنشئ ادواترياضية.lua:

-- ادواترياضية.lua
local ادواترياضية = {}

function ادواترياضية.جمع(a, b)
    return a + b
end

function ادواترياضية.ضرب(a, b)
    return a * b
end

return ادواترياضية

استخدم في الملف الرئيسي:

-- رئيسي.lua
local ادواترياضية = require("ادواترياضية")

نتيجة = ادواترياضية.جمع(10, 5)
print("نتيجة الجمع:", نتيجة)  -- الإخراج: نتيجة الجمع: 15

نتيجة = ادواترياضية.ضرب(4, 6)
print("نتيجة الضرب:", نتيجة)  -- الإخراج: نتيجة الضرب: 24

9. معالجة الأخطاء

-- التقاط الأخطاء بـ pcall
function عمليةخطيرة()
    error("حدث خطأ!")
end

-- pcall يستدعي بشكل محمي
نجاح, نتيجة = pcall(عمليةخطيرة)

if نجاح then
    print("نجاح:", نتيجة)
else
    print("فشل:", نتيجة)
end

-- أخطاء مخصصة
function قسمة(a, b)
    if b == 0 then
        error("القسمة على صفر غير مسموحة")
    end
    return a / b
end

نجاح, نتيجة = pcall(قسمة, 10, 0)
if not نجاح then
    print("خطأ:", نتيجة)
end

10. أمثلة عملية

-- آلة حاسبة بسيطة
function آلةحاسبة()
    print("🐮 آلة حاسبة بسيطة")
    print("1. جمع")
    print("2. طرح") 
    print("3. ضرب")
    print("4. قسمة")
    
    اختيار = tonumber(io.read())
    print("الرقم الأول:")
    رقم1 = tonumber(io.read())
    print("الرقم الثاني:")
    رقم2 = tonumber(io.read())
    
    if اختيار == 1 then
        نتيجة = رقم1 + رقم2
        print("النتيجة:", نتيجة)
    elseif اختيار == 2 then
        نتيجة = رقم1 - رقم2
        print("النتيجة:", نتيجة)
    elseif اختيار == 3 then
        نتيجة = رقم1 * رقم2
        print("النتيجة:", نتيجة)
    elseif اختيار == 4 then
        if رقم2 ~= 0 then
            نتيجة = رقم1 / رقم2
            print("النتيجة:", نتيجة)
        else
            print("❌ قسمة على صفر")
        end
    else
        print("🤔 اختيار غير صحيح")
    end
end

-- للاستخدام، أزل التعليق
-- آلةحاسبة()

-- عمليات الملفات
function قراءةملف(اسمملف)
    local ملف = io.open(اسمملف, "r")
    if not ملف then
        return nil, "لا يمكن فتح الملف"
    end
    
    local محتوى = ملف:read("*a")
    ملف:close()
    return محتوى
end

محتوى, خطأ = قراءةملف("مثال.txt")
if محتوى then
    print("محتوى الملف:", محتوى)
else
    print("خطأ:", خطأ)
end

خاتمة

Lua رائعة! مثالية ل:

  • 🎮 برمجة الألعاب (الكثير من الألعاب تستخدمها)
  • 🔧 التطبيقات المضمنة (لخفتها)
  • ⚙️ ملفات الإعدادات والأتمتة
  • 🚀 scenarios الأداء العالي (مع LuaJIT)

أفضل ما في Lua:

  • خفيفة الوزن: تشغل مساحة صغيرة
  • سريعة: LuaJIT سريع جدًا
  • مرنة: typing ديناميكي + جداول عالمية
  • محمولة: تعمل على الهواتف والخوادم
  • سهلة التضمين: تتعامل جيدًا مع C/C++

تريد التعلم أكثر؟ جرب:

  • مكتبة Lua القياسية
  • كوروتينات (برمجة متزامنة)
  • Metatables و metamethods (لـ OOP)
  • Lua C API
  • Love2D لتطوير الألعاب

Lua سهلة التعلم وقوية! 🚀