الممثّلات


من المشكلات التي تواجه مجتمع Exercism كيفية تقديم تغذية راجعة ذات معنى لكثير من الأشخاص الذين يقدّمون حلولًا كثيرة لتمارين مختلفة. وللمساعدة في تقليص حجم هذه المهمة التي قد تكون هائلة، تُطبَّع الحلول إلى "تمثيلات". على سبيل المثال، من بين آخر 500 حل مُرسل لتمرين TwoFer على مسار Ruby، يمكن اعتبار نحو 380 منها فريدًا (إذا طبّعت التفاصيل التافهة مثل تنسيق الكود والتعليقات). وإذا طبّعتها أكثر (بتطبيع أشياء مثل أسماء الدوال أو المتغيرات)، يصبح هذا العدد أصغر، فقد لا يبقى سوى 250 أسلوبًا فريدًا. وإذا تمكّن مجتمع Exercism من تقديم بعض التغذية الراجعة على تلك الأساليب الـ250، فالأمل أن نكون قد أعددنا تغذية راجعة سليمة لنحو 99% من كل الحلول المُرسلة مستقبلًا لتمرين TwoFer. ومع تمارين المفاهيم سيكون فضاء الحلول أصغر، لأن تمارين المفاهيم مصممة عن قصد لتُحل بأسلوب محدد.

المُمثِّل هو قطعة من الكود مسؤوليتها الوحيدة أن تأخذ حلًا وتُرجع تمثيلًا مُطبَّعًا له.

التمثيل هو استخلاص للحل إلى جوهره مع تطبيع الأسماء والتعليقات والمسافات وما إلى ذلك، لكنه يظل يحدد الأسلوب المُتبع تحديدًا فريدًا. يجب ألا يكون لأسلوبين مختلفين في حل التمرين نفسه التمثيل ذاته.

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

وبعد أن يصبح لدينا تمثيل مُطبَّع لحل ما، ينظر فريق من الموجِّهين المعتمدين في الحل ويعلّقون عليه (إذا لزم الأمر). ثم تُرسل هذه التعليقات تلقائيًا إلى كل حل جديد له التمثيل نفسه. وسيُرسل إشعار بشأن الحلول القديمة ذات التمثيل المطابق.

المساهمة في المُمثِّلات

لكل لغة المُمثِّل الخاص بها، مكتوبًا بتلك اللغة. ويعمل الموقع كمنسّق بين المُمثِّل وحلول الطلاب المُرسلة.

يوجد كل مُمثِّل في منظمة Exercism على GitHub في مستودع اسمه <track_slug>-representer (مثل exercism/ruby-representer). يمكنك الاطّلاع على المُمثِّلات الموجودة هنا.

إذا أردت المشاركة في المساعدة في مُمثِّل موجود، فافتح issue في مستودعه واسأل إن كان هناك مكان يمكنك المساعدة فيه. وإذا أردت إنشاء مُمثِّل للغة ليس لها مُمثِّل حاليًا، فاتبع تعليمات إنشاء مُمثِّل.

يمكنك استخدام المستندات التالية لمعرفة المزيد عن بناء مُمثِّل: