هل Lua مناسبة لهياكل البيانات والخوارزميات؟
لتعلّمها، جيدة على نحو مفاجئ: فمع الجداول وحدها كمادة للبناء، يصبح كل هيكل صريحاً، وتبقى الشيفرة قصيرة. والعقبة أن الجداول تغفر الأخطاء بصمت: المصفوفات تبدأ من 1 اصطلاحاً، والمفتاح الغائب يعيد nil بدلاً من خطأ، ومعامل الطول #t لا يُعتمد عليه إلا في تسلسل بلا فجوات nil. وقليلة هي المقابلات التي تُجرى بلغة Lua، لذا إن كانت المقابلة هدفك، فحزم المقابلات متاحة أيضاً باللغة التي ستستخدمها هناك.
كيف تبني مكدساً وطابوراً من جدول Lua؟
المكدس هو الجزء المصفوفي مستخدماً من طرف واحد: table.insert(t, x) تضيف وtable.remove(t) تُخرج. أما الطابور فيحتاج إلى عناية أكبر، لأن table.remove(t, 1) تزيح كل العناصر المتبقية موضعاً واحداً إلى الأسفل، لذا تكون كل عملية إخراج O(n). احتفظ بدلاً من ذلك بفهرسين، first وlast: أضف عند last + 1، واقرأ عند first، واجعل تلك الخانة nil ثم تقدّم، فتصبح عملية الإخراج بزمن ثابت. وفي الخطوة الأولى تبني كليهما.
لماذا يعطي #t أحياناً طولاً خاطئاً في Lua؟
لأن # تعيد حداً (border) من حدود الجدول: فهرساً n تختلف عنده t[n] عن nil بينما تساويها t[n + 1]. التسلسل السليم له حد واحد بالضبط، هو طوله؛ ضع nil في المنتصف وقد تصبح له حدود عدة، وقد تعيد # أياً منها. لذا لا تخزّن nil أبداً في مصفوفة تقيس طولها بـ #، وفي الهياكل ذات الفجوات، مثل طابور بفهرسين، تتبّع الحجم بنفسك.
هل تهم هياكل البيانات في برمجة سكربتات Roblox؟
نعم، حين تكبر اللعبة وتتجاوز حفنة من الكائنات. فالمخزون جدول تجزئة، وترتيب الظهور أو الأدوار طابور، وقائمة فترات الانتظار (cooldowns) يمكن أن تكون طابور أولوية، وإيجاد مسار عبر الخريطة بحث في رسم بياني. وLuau، اللغة التي تُكتب بها سكربتات Roblox، مشتقة من Lua 5.1 وتحتفظ بجداولها ومصفوفاتها التي تبدأ من 1 ومعامل #، لذا فما تبنيه هنا ينتقل معك مباشرة.
ما الدورات في هذا المسار التي لا تُدرَّس بلغة Lua؟
ثلاث دورات. البرمجة الديناميكية وسلسلة مقابلات Python تُدرَّسان بلغة Python، وعمليات البتات بلغة C++. وتجدها مُدرجة بعد الخطوات، ولكل منها رابط يفتحها بلغتها. جدول النتائج المحفوظة في Lua جدول عادي؛ ومعاملات البتات لم تصل إلا في Lua 5.3، التي فيها & و| و<< و>> كما في C++، وتكتب كلاً من XOR والنفي (NOT) على الصورة ~.
هل أحتاج إلى معرفة Lua قبل بدء هذا المسار؟
الجداول والدوال والحلقات والمتغيرات المحلية على الأقل؛ والجداول الوصفية (metatables) تفيد إن أردت هياكل تتصرف ككائنات. إن كانت هذه جديدة عليك، فدورة Lua من Coddy تغطيها أولاً مجاناً، ويبدأ هذا المسار من حيث تنتهي.