خاصية رزمة الأوامر

متوفرة في الإصدار 0.8 من لغة الأسس

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

المثال أعلاه مطابق للتالي:

قد تبدو الخاصية محدودة الفائدة، لكن لهذه الخاصية ميزات تجعلها مفيدة جدًا:

  • يمكن تطبيق الخاصية على المتغيرات المؤقتة.
  • يمكن تطبيق الخاصية بشكل ضمني، أي ضمن تركيب آخر.
  • داخل رزمة الأوامر لست محددا بالمتغير المُستهدف بهذه الرزمة، وإنما بإمكانك كتابة ما تشاء من الأوامر داخل الرزمة بما فيها إنشاء متغيرات أخرى. كل ما هنالك أن المترجم يعطي أولوية البحث عن الأعضاء للمتغير المستهدف.

لاحظ هذا المثال:

في المثال أعلاه نفذنا جملتين بشكل ضمني أثناء إنشاء المتغير المؤقت ذي الصنف نـقطة. هذا المثال مطابق للتالي:

لاحظ أننا اختصرنا الأمر في جملة واحدة وكذلك وفرنا على أنفسنا الحاجة لتسمية المتغير المؤقت.

لهذه الخاصية فائدة كبرى في إنشاء شجرات البيانات وواجهات المستخدم. لنلقِ نظرة على المثال التالي ونرى كيف يمكن استخدام هذه الخاصية لتحسينه:


هذا جزء من مثال البسملة ضمن مكتبة جـتك GTK وهو الجزء المسؤول عن إنشاء نافذة البرنامج كما في الصورة:

image

باستخدام رزم الأوامر يمكن إعادة كتابة هذا الجزء كما يلي:


نلاحظ من التحويل أننا كسبنا التالي:

  • اختصرنا البرنامج من 17 سطرًا إلى 13 (إذا ما أهملنا السطور التي تحتوي فقط قوس الإغلاق).
  • وفرنا على أنفسنا تسمية المتغيرات المؤقتة، فأزلنا 5 تعريفات لمتغيرات من البرنامج. من المعروف أن المتغيرات في البرنامج إن زادت تصعب فهم البرنامج وكذلك تصعب عملية اختيار أسماء مناسبة للمتغيرات.
  • وأهم مما سبق، النسخة الجديدة غير مقلوبة، أي أن إنشاء واستخدام الكائنات يتم حسب تسلسل ظهورها في واجهة المستخدم، بعكس النسخة القديمة التي تُنشأ فيها الكائنات حسب توفر الاعتماديات، وبالتالي تُنشأ بشكل عكسي. فالصندوق يُنشأ ثم يليه أمر إضافته للنافذة، وكذلك الأزرار تُنشأ قبل إضافتها للصندوق، وهكذا.

السعي لهذه المكاسب هو الذي يدفع لغات أخرى لإنشاء واجهات المستخدم باستخدام ملف XML أو JSON أو ما شابه. الآن في الأسس سيمكننا إنشاء واجهات مستخدم بشكل مرتب ومنظم، ودون الحاجة للاستعانة بملفات خارجية.

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

يمكن أيضًا استخدام الخاصية كبديل أكثر مرونة لمؤثر ؟ المستخدم في كثير من اللغات. الدالة التالية تطبع ما إذا كان المعطى فرديًا أم زوجيًا وتتجاهل إذا كان صفرًا:

تمتاز هذه الطريقة عن المؤثر ؟ بأمرين:

  • لست محدودًا بإحدى قيمتين كما هو الحال مع المؤثر ؟ وإنما يمكنك أن تكتب عبارات إذا بالشكل الذي تريده.
  • يمكنك تنفيذ أوامر ليست ممكنة مع مؤثر ؟ كما هو الحال مع عبارة الإرجاع في حالة ع == 0 والتي ستخرج من الدالة قبل تنفيذ الأمر اطبع.
3 Likes