WorkShop Hisham
مشاركتكم معنا تسعدنا

WorkShop Hisham

لغــــــــــــة البـــــــــرمجة Lua
 
الرئيسيةالتسجيلدخول

شاطر
 

  سلسلة دروس في لغة البرمجة Lua

اذهب الى الأسفل 
كاتب الموضوعرسالة
الأدارة
المدير العــــام
المدير العــــام
الأدارة

عدد المساهمات : 45
تاريخ التسجيل : 28/07/2009

  سلسلة دروس في لغة البرمجة Lua  Empty
مُساهمةموضوع: سلسلة دروس في لغة البرمجة Lua      سلسلة دروس في لغة البرمجة Lua  Icon_minitimeالأحد 6 أغسطس - 21:54:19

-
  سلسلة دروس في لغة البرمجة Lua  44610205
مقدمة في لٌوا

عبارة عن لغة برمجة للإضافات "Extension Programming Language"
صممت لتدعم نمط البرمجة الإجرائية أو ما يسمى بالـ Procedural Programming مع مرافق وصف البيانات.
لُوا صممت لتستخدم كلغة برمجة قوية وخفيفة الحمل لأي برنامج يحتاجه المرء.

Lua:

مقدمة في العمليات - Conventions






سابدأ إن شاء الله أول درس في مقدمة لتعلم لغة البرمجة لوا Lua وهو الاتفاقيات - Conventions
الاتفاقيات

الأسماء (أو كما تسمى بـ المعرفات) في لُوا يمكن أن تكون سلسلة من حروف، أرقام و شرطة سفلية (Underscores)
بشرط ألا تبدأ برقم وتكون باللغة الإنجليزية. هذا يتزامن مع تعريف الأسماء في أغلب لغات البرمجة. تعريف "الحرف" يعتمد
على موضعه الحالي: أي حرف أبجدي يعتبر من اللغة الحالية يمكن استخدامه كمعرف (Identifier).
المعرفات تستخدم لتسمية المتغيرات (Variables) وحقول الجداول (Table Fields).
الكلمات التالية محجوزة ولا تستطيع استخدامها كأسماء وتعريفات للمتغيرات لأن لوا تستخدمها لإجراء العمليات المختلفة:

and     break        do         else     elseif     end       false
for     function     if         in       local      nil       not
or      repeat       return     then     true       until     while

العلامات التالية دلالة على رموز أخرى

+      -      *      /      %      ^      #
==     ~=     <=     >=     <      >      =
(      )      {      }      [      ]
;      :      ,      .      ..     ...

لُوا لغة حساسة لحالة الأحرف: ذكرت سابقاً أن and اسم محجوز للغة نفسها، ولكن على سبيل المثال AND أو And أسماء مختلفة
يمكنك استخدامها، أسماء صالحة لتكون معرفات.
الاسماء التي تبدأ بشرطة سفلية _VERSION محجوزة للمتغيرات العالمية الداخلية (Internal Global Variables) المستخدمة من قبل لُوا.

التعليق في لُوا (وهو النص الذي يتم تجاهله في البرمجة) يبدأ بوصلتين متتاليتين -- في أي مكان خارج الاسم ويتنتهي بإنتهاء الخط.
تستطيع أيضاً تعليق مجموعة من الأكواد البرمجية بواسطة إحاطتها بـ --[[ و --]] . ولإلغاء التعليق عن مجموعة الأكواد،
ببساطة أضف -- في البداية ---[[--single line commented out تعليق خط برمجي واحد

--[[ entire block commented out تعليق أكثر من خط من الأكواد
print( 10 )
print( 15 )
--]]


Lua




: الأنواع والقيم - Types and Values





لُوا لغة برمجة ديناميكية، وهذا يعني أن المتغيرات ليس لها أنواع؛ القيم فقط بها أنواع. لا توجد تعريفات للنوع في اللغة. كل القيم تحمل الأنواع الخاصة بها.

للإطلاع أكثر على تعريف لغات البرمجة الديناميكية:

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]

كافة القيم في لوا هي قيم من الدرجة الأولى أو First-class Values. وهذا يعني أن جميع القيم
يمكن تخزينها في المتغيرات، تمريرها كقيم للعمليات، و إعادتها كنتائج.
الأنواع الأساسية التي يجب أن تهتم بها هي كالتالي:

   nil — فارغ هذا النوع من القيم والذي يتمثل بـ nil يختلف عن باقي القيم، ويمثل عدم وجود قيمة مفيدة أو حالة فراغ أو عدم للقيمة.

   boolean — منطقية يمثل أنواع القيم التي تكون إما صحيح true أو خطأ false. كل من القيم المتمثلة في nil أو false
ستنتج حالة خاطئة؛ بينما أي قيمة أخرى ستنتج حالة صحيحة.

   number — رقم يمثل الأرقام الصحيحة (double-precision floating-point) [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]

   string — سلسلة يمثل مصفوفة من الحروف. لُوا تدعم 8 بت: السلسلة يمكن أن تحتوي على أي حرف 8 بت، بما في ذلك جزءا لا يتجزأ من الأصفار.

   function — عملية شرحها بالتفصيل في موضوع مستقل.

   table — جدول آلية هيكلة البيانات الوحيدة في لُوا. شرحها بالتفصيل في موضوع مستقل.

توفر لُوا التحويل التلقائي بين قيمة سلسلة و عدد أثناء وقت التشغيل. أي عملية حسابية تطبق على سلسلة فإن لوا ستحاول تحويل هذه السلسلة إلى عدد.
على العكس، كلما تم استخدام عدد في موقع حيث من المتوقع أن يكون سلسلة،
يتم تحويل العدد إلى سلسلة، في شكل معقول. من أجل تحكم كامل على كيفية تحويل الأرقام إلى سلاسل أو العكس، استخدم الدالة string.format من مكتبة سلسلة.



Lua: الجداول - Tables






الجداول في لُوا، سهلة، قوية، مرنة ولا يمكن الاستغناء عنها أبداً !

   الجداول هي الآلية الوحيدة في هيكلة البيانات في لوا.

تقوم الجداول بإنشاء مصفوفات ترابطية "Associative Arrays"،
وهذا يعني أن المصفوفات يمكن فهرستها ليس فقط بالأرقام، ولكن مع أي قيمة إلا قيمة الفراغ nil.
الجداول يمكن أن تكون غير متجانسة ويمكن أن تحتوي على قيم من جميع الأنواع باستثناء قيمة الفراغ nil.

لتمثيل السجلات (الخصائص)، تستخدم لوا اسم الحقل كفهرست. تدعم اللغة هذا التمثيل من خلال توفير a.name كتجميل برمجي لغوي إلى ["a["name.

تماماً كالفهرست، فقيمة حقل الجدول يمكن أن تكون من أي نوع باستثناء nil. على وجه الخصوص،
لأن العمليات/functions هي قيم من الدرجة الأولى "first-class values"،
حيث يمكن حتى لحقول الجدول أن تحتوي على العمليات أو الـ functions. وبالتالي يمكن أيضاً أن تحمل الجداول الأساليب أو ماتسمى بالـ methods.

الجداول عبارة عن كائنات "objects": المتغيرات في الواقع لا تحتوي على هذه القيم بل مراجع لهم فقط. فالتعيين، وتمرير العوامل،
وعوائد العمليات تعود دائماً إلى ما يشير إلى هذه القيم؛ هذه العمليات لا تعني أي نوع من النسخ.

إنشاء الجدول يكون باستخدام قوسان مجعدان كما في { }


الكود:
t = {}
          -- هنا نقوم بإنشاء الجدول


الكود:
k = "x"

الكود:
t[k] = 3.14
     -- تعيين حقل جديد بالجدول بمفتاح يساوي "x" وقيمة تساوي "3.14"

print( t[k] )    --> 3.14
print( t["x"] )  --> 3.14
print( t.x )     --> 3.14

t[2] = "foo"      -- تعيين حقل جديد بالجدول بمفتاح يساوي "2" وقيمة تساوي "foo"

print( t[2] )    --> "foo"

الوصول إلى المدخلات

في المثال أعلاه، تم الوصول إلى المدخل مع اسم الحقل "x" بطريقتين: الأولى كخاصية باستخدام عامل النقطة والثانية في مؤشر للمصفوفة باستخدام

t["x"]

وهناك خطأ شائع هو الخلط بين t.x مع [t[x. الأول هو ما يعادل ["t["x: وهو جدول فهرسته من قبل سلسلة/string بـ "x" والثاني هو جدول فهرسته من قبل قيمة المتغير x.


Lua: المتغيرات - Variables






المتغيرات

ببساطة يمكن أن نعرف المتغيرات في لوا على أنها أماكن لحفظ القيم. هناك ثلاثة أنواع من المتغيرات: عالمية المجال،
محلية المجال، وحقول مجدولة (global, local & table fields).
أي متغير غير معرّف مسبقاً فهو nil بشكل افتراضيا و nil هنا تعني أنه لا توجد قيمة معينه للمتغير أو أنه فارغ.
عالمية المجال

المتغيرات العالمية لا تحتاج لتعريفه "Declarations". يمكنك ببساطة تعيين قيمة لإنشائه:

print( s )  --> nil  لا توجد قيمة لأننا لم نقم بتعيين أي قيمة فيطبع لنا
s = "موقع أرابيا"
print( s )  --> موقع أرابيا

المتغيرات العالمية تبقى موجودة ما دام التطبيق قيد التشغيل. يمكنك حذف متغير عمومي عن طريق تعيين لا شيء عليه، والمقصود تعيين قيمة بـ nil.
عند هذه النقطة، المتغير العالمي يتصرف كما لو أنه لم تم تهيئة أبداً. s = nil print( s ) --> nil
محلية المجال

يتم تعريف المتغيرات المحلية باستخدام عبارة local

x = 1         -- متغير عالمي
local y = 10  -- متغير محلي

وخلافاً للمتغيرات العالمية، المتغيرات المحلية مرئية فقط في الكتلة الني تم التعريف بها. مجال المتغير المحلي يبدأ بعد إعلان وينتهي في نهاية الكتلة. غير مفهوم؟ لنأخذ مثال للتوضيح Smile

الكود:

a = 10
local i = 1

الكود:

while ( i <= 10 ) do
    local a = i*i  -- المتغير هنا متغير محلي لأنه ضمن نطاق هذه الكتلة وقمنا بتعريفه كمحلي
    print( a )     --> 1, 4, 9, 16, 25, ...
    i = i + 1
end

print( a )         --> 10 (هنا المتغير عالمي 'a')

الحقول المجدولة

الحقول المجدولة ليست سوى عناصر للجدوال. تستطيع فهرستها كالمصفوفات لتعيين قيم للحقول.

الكود:

t = { foo="hello" }  -- إنشاء جدول بحقل واحد باسم foo
print( t.foo )       --> "hello"

t.foo = "مع السلامة"        -- "foo" تعيين قيمة إلى حقل
print( t.foo )       --> "مع السلامة"

t.bar = 10           --إنشاء حقل جديدة باسم "bar"
print( t.bar )       --> 10
print( t["bar"] )    --> 10

----------------------------------

Lua: التعبيرات - Expressions





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

 

العمليات الحسابية 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)
^

العمليات - Functions في لوا








ي هذا الموضوع سيتم شرح العمليات أو الوظائف والتي تسمى بالـ Functions في لغة البرمجة لوا

العمليات/الوظائف كما هو المتوقع منها في أغلب لغات البرمجة عبارة عن مهمة واحدة
أو مجموعة من المهام وعادة ما نقوم بتمرير بعض المدخلات inputs أو parameters (داخل الأقواس) كما في المثال بالأسفل.
العملية تقوم بعمل بعض المهام tasks وبعد الإنتهاء من المهمة تقوم بطباعة النتيجة إن اردت.

وفيما يلي الطرق الشائعة لكتابة العمليات/الوظائف:

الكود:

local function f ()
--body
end

local f = function()
--body
end

function f ()
--body
end

f = function ()
--body
end

الجميل جداً في لوا هو أن العمليات يمكن أن تكون متغيّر ، لذلك الجداول في لوا ممكن أن تخزن العمليات في خصائصها.
هذا يسمح بمرونة في استخدام الجداول. تستطيع استخدامها لحصر مجموعة من العمليات في جدول. لتسهيل الصورة لنأخذ على سبيل المثال مكتبة الرياضات في لوا.
في هذه الحالة، لحساب جا 100 أو sin 100، ستكتب:

math.sin(100)

هنا، العملية الرياضية ليست سوى مجرد جدول table والخاصية sin هي في الواقع العملية أو الوظيفة.
Object Method طرق العنصر

العناصر objects في لوا متمثلة في الجداول tables. عرض عناصر كالـ (المربعات، الصور، الخ)
و عناصر وقت التشغيل في المدى العالمي (global Runtime object) ليست سوى عناصر.
كما في مكتبة الرياضيات، هذه العناصر تقوم بحفظ طرق العنصر (instance methods) كخصائص.
وجه الاختلاف الوحيد، ومع ذلك، هو طريقة الكتابة syntax. يجب أن تخبر لوا أنك تعتزم لهذه العملية أن تسمى طرق العنصر object method
وليست مجرد عملية عادية. وللقيام بذلك، يجب أن تستخدم عامل (Smile عوضاً عن عامل النقطة فقط.
هذه يمكن أن يختلف في لغات البرمجة الأخرى، لنرى الاختلاف بين الجافاسكربت ولوا:
Javascript


الكود:
object.translate( 10, 10 );


Lua


الكود:
object:translate( 10, 10 )


اتمنى أنني وفقت في الشرح وإذا كانت لديكم أسئلة، الرجاء كتابتها في التعليقات.








الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://workshop.rigala.net
 
سلسلة دروس في لغة البرمجة Lua
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
WorkShop Hisham :: عالم AutoPlay Media Studio :: قسم الدروس والشروحات-
انتقل الى: