نصائح للعمل مع Unison محليًا عبر Exercism CLI
تكتب كود Unison في ملفات تحمل اللاحقة .u. نسميها ملفات "المسوّدة" لأنك تستخدمها لكتابة كود Unison، لكن مدير قاعدة كود Unison (UCM) هو ما يخزّن محتوى هذه الملفات ويحفظه في النهاية. ستظل تسلّم هذه الملفات عبر واجهة سطر الأوامر الخاصة بـ Exercism، لكن يمكن اعتبار UCM "مصدر الحقيقة" لكود Unison.
بينما لا تمتلك Unison واجهة REPL (حلقة القراءة والتقييم والطباعة والتكرار)، يمكنك تقييم تعبيرات Unison بسرعة في "تعبيرات المراقبة". في ملفك ذي اللاحقة .u، ابدأ سطرًا بالرمز > وأدخل تعبيرًا إلى يمينه.
> myFunction 42 "hi"
سيعرض UCM نتائج تقييم التعبير عند حفظ الملف. يمكنك الاستفادة من ذلك عند استكشاف أخطاء تنفيذات تمارينك وإصلاحها.
للاطلاع على سير عمل أكثر تفصيلًا على Exercism، إليك فيديو توضيحي يشرح كيفية تنفيذ مسألة من Exercism واختبارها.
يعرض الفيديو التوضيحي سير العمل الخاص بإصدار أقدم من Unison. اطّلع على سير العمل الجديد هنا مع سير عمل المشروع الجديد.
تُنظَّم قاعدة كود Unison بواسطة "فضاءات الأسماء". تعمل فضاءات الأسماء بشكل يشبه الأدلة في نظام الملفات، إلا أنها تحتوي على أنواعك ودوالك في Unison بدلًا من الملفات. تُفصل مسارات فضاءات الأسماء بنقاط، .. على سبيل المثال، يمكننا الإشارة إلى فضاء الأسماء Text داخل فضاء الأسماء base بـ base.Text.
نوصي بإنشاء فضاء أسماء لكل تمرين تنجزه، أو الانتقال إليه باستخدام cd.
صيغة Unison لإدارة الاستيرادات وتحديدها هي صيغة use. على سبيل المثال، يجلب use base.data.List جميع الدوال الموجودة ضمن فضاء الأسماء base.data.List إلى النطاق. يمكن أن يكون ذلك مفيدًا عندما تستخدم دالة مثل map على List وتحتاج إلى تمييزها عن دوال map الأخرى مثل Optional.map. يمكنك أيضًا استيراد دوال محددة بكتابة فضاء الأسماء متبوعًا بقائمة أسماء دوال مفصولة بمسافات لإدخالها إلى النطاق، كما في: use base.data.List tails head flatMap.
يمكنك استخدام صيغة use لتحديد الاستيرادات على المستوى الأعلى للملف وداخل الدوال. تحترم جمل use قواعد النطاق المعجمي، لذا تكون الاستيرادات الأكثر تعشيشًا ذات أولوية على الأقل تعشيشًا.
تُسمى مكتبة Unison القياسية base. ويُجري تنزيلها افتراضيًا في قواعد كود Unison الجديدة. يمكنك تصفح الدوال المتاحة لتنفيذاتك عبر المستودع الإلكتروني لكود Unison، Unison share، أو عبر واجهة قاعدة الكود المحلية، أو بالبحث في مدير قاعدة كود Unison (UCM). سنشرح ذلك بعد قليل.
تتوفر قائمة كاملة بأوامر UCM بإدخال help في UCM، لكن إليك بعض النصائح والأعراف.
يمكنك البحث عن التعريفات بالاسم أو ببادئة فضاء الأسماء في UCM باستخدام الأمر find، لكن find يدعم أيضًا البحث في قاعدة الكود حسب النوع. للبحث عن دالة بتوقيع نوعها، أدخل find متبوعًا بمسافة ونقطتين، مثل: find : [a] -> [[a]].
يمكنك سرد محتويات فضاء أسماء باستخدام الأمر ls، مثل ls base.data.List أو ls .exercism.helloWorld. تقبل العديد من أوامر UCM وسائط مسارات فضاءات الأسماء النسبية أو الوسائط المؤهلة بالكامل. تبدأ المسارات المؤهلة بالكامل بنقطة . تمثل "جذر" قاعدة الكود.
تنقّل داخل UCM باستخدام الأمر cd في واجهة سطر الأوامر. إذا لم يكن فضاء الأسماء موجودًا، سينشئه الأمر cd عند الانتقال إليه. وللصعود إلى فضاء الأسماء الأعلى يمكنك استخدام cd ...
عندما أحمّل الاختبارات، لا يستطيع UCM العثور على تنفيذ تمريني.
تأكد من حفظ ملف البداية في محرر النصوص، ومن تحديث التعريفات في قاعدة الكود باستخدام update قبل تحميل الاختبارات.
أواجه تعارضات في التسمية. لا يمكن أن يكون لدي تعريفان باسم tests.
يمكن أن يكون لديك تعريفان بالاسم نفسه في فضاءي أسماء مختلفين. وإذا كنت تنجز تمارين Exercism، يُوصى بإنشاء فضاء أسماء منفصل لكل تمرين، بحيث تنفصل الاختبارات وملفات البداية عن غيرها.
تنجح اختباراتي محليًا لكنها لا تنجح مع مشغّل الاختبارات.
آسفون لذلك! تحقق أولًا من أن استيراداتك لا تشير إلى أي شيء غير المكتبة القياسية base، والدوال المعرّفة في ملف scratch الخاضع للاختبار. إذا كان الأمر كذلك، فأخبرنا في قناة #track-unison على Slack الخاص بـ Exercism أو بتقديم بلاغ على مستودع مسار Unison.
إذا واجهت أي مشكلات، فأخبرنا! 🙂