कमांड लाइन पर काम करना

Exercism CLI के ज़रिए लोकली Unison के साथ काम करने के सुझाव।


Unison कोड लिखना और उसका मूल्यांकन

आप Unison कोड उन फाइलों में लिखते हैं जिनके नाम के अंत में .u होता है। हम इन्हें "स्क्रैच" फाइलें कहते हैं, क्योंकि आप इनका इस्तेमाल Unison कोड लिखने के लिए करते हैं, लेकिन इन फाइलों की सामग्री को अंततः संग्रहीत और सहेजता Unison Codebase Manager (UCM) है। आप इन फाइलों को अब भी Exercism CLI के ज़रिए जमा करेंगे, लेकिन Unison कोड के लिए UCM को एक विश्वसनीय स्रोत माना जा सकता है।

Unison में REPL (Read Evaluate Print Loop) नहीं होता, लेकिन "watch expressions" में आप Unison एक्सप्रेशन का मूल्यांकन तुरंत कर सकते हैं। अपनी .u वाली फाइल में किसी लाइन की शुरुआत > से कीजिए और उसके दाईं ओर एक्सप्रेशन लिखिए।

> myFunction 42 "hi"

फाइल सहेजते ही UCM उस एक्सप्रेशन के मूल्यांकन का परिणाम दिखा देगा। अपने अभ्यास के कार्यान्वयन में कोई गड़बड़ी ढूँढ़ते समय इसका इस्तेमाल किया जा सकता है।

Exercism के वर्कफ्लो को और गहराई से समझने के लिए, यहाँ एक वॉक-थ्रू वीडियो है जिसमें Exercism के एक अभ्यास को लिखने और जाँचने का तरीका दिखाया गया है।

Caution

यह वॉक-थ्रू वीडियो Unison के पुराने संस्करण का वर्कफ्लो दिखाता है। नए प्रोजेक्ट वर्कफ्लो के साथ नया वर्कफ्लो यहाँ देखिए।

कोडबेस का संगठन

Unison का कोडबेस "नेमस्पेस" के अनुसार व्यवस्थित होता है। नेमस्पेस किसी फाइल सिस्टम की डायरेक्टरी की तरह थोड़ा-बहुत काम करते हैं, बस फर्क यह है कि उनमें फाइलों की जगह आपके Unison टाइप और फंक्शन रहते हैं। नेमस्पेस पाथ को डॉट (.) से अलग किया जाता है। उदाहरण के लिए, base नेमस्पेस के अंदर मौजूद Text नेमस्पेस को हम base.Text से दर्शा सकते हैं।

हमारा सुझाव है कि आप हर उस अभ्यास के लिए एक अलग नेमस्पेस बनाइए जिसे आप पूरा कर रहे हैं, या उसमें cd कीजिए।

इम्पोर्ट

इम्पोर्ट को संभालने और तय करने के लिए Unison में use सिंटैक्स इस्तेमाल होता है। उदाहरण के लिए, use base.data.List लिखने से base.data.List नेमस्पेस के सभी फंक्शन स्कोप में आ जाएँगे। यह उन स्थितियों में काम आता है जहाँ आप List पर map जैसा फंक्शन इस्तेमाल कर रहे हों और उसे Optional.map जैसे दूसरे map फंक्शन से अलग करना ज़रूरी हो। आप नेमस्पेस के बाद स्पेस से अलग की गई फंक्शन की सूची लिखकर कुछ खास फंक्शन भी स्कोप में ला सकते हैं, जैसे: use base.data.List tails head flatMap।

आप इम्पोर्ट निर्दिष्ट करने के लिए use सिंटैक्स फाइल के टॉप-लेवल पर भी इस्तेमाल कर सकते हैं और फंक्शन के अंदर भी। use क्लॉज़ लेक्सिकल स्कोपिंग के नियमों का पालन करते हैं, इसलिए ज़्यादा नेस्टेड इम्पोर्ट कम नेस्टेड इम्पोर्ट पर प्राथमिकता लेते हैं।

स्टैंडर्ड लाइब्रेरी

Unison की स्टैंडर्ड लाइब्रेरी को base कहा जाता है। नए Unison कोडबेस में यह अपने आप डाउनलोड हो जाती है। आप अपने कोड को उपलब्ध फंक्शन यहाँ देख सकते हैं: Unison कोड के ऑनलाइन रिपॉज़िटरी Unison share, या लोकल कोडबेस UI, या Unison Codebase Manager (UCM) में सर्च करके। आगे हम इसी के बारे में बताएँगे।

Unison Codebase Manager (UCM) में नेविगेट करना

UCM में help लिखकर आप UCM के सारे कमांड की पूरी सूची देख सकते हैं, लेकिन यहाँ कुछ सुझाव और आम तौर-तरीके दिए गए हैं।

UCM में आप find कमांड से नाम या नेमस्पेस प्रीफिक्स के आधार पर टर्म खोज सकते हैं, लेकिन find कोडबेस में टाइप के आधार पर खोज भी कर सकता है। किसी फंक्शन को उसके टाइप सिग्नेचर से खोजने के लिए find लिखिए, उसके बाद स्पेस और कोलन, जैसे find : [a] -> [[a]]।

किसी नेमस्पेस के अंदर की चीज़ों की सूची ls कमांड से देख सकते हैं, जैसे ls base.data.List या ls .exercism.helloWorld। UCM के बहुत-से कमांड आर्गुमेंट के तौर पर रिलेटिव नेमस्पेस पाथ भी स्वीकार करते हैं और पूरे नेमस्पेस पाथ भी। पूरे नेमस्पेस पाथ . से शुरू होते हैं, जो आपके कोडबेस के "मूल" को दर्शाता है।

CLI में cd कमांड से UCM में इधर-उधर जा सकते हैं। अगर कोई नेमस्पेस मौजूद नहीं है, तो उसमें जाते ही cd उसे बना देगा। नेमस्पेस से एक स्तर ऊपर जाने के लिए cd .. इस्तेमाल कर सकते हैं।

समस्या हल करना

टेस्ट लोड करने पर UCM को मेरा अभ्यास कार्यान्वयन नहीं मिलता।

टेस्ट लोड करने से पहले यह ज़रूर देख लीजिए कि आपने अपने टेक्स्ट एडिटर में स्टब फाइल सहेज दी है और अपने कोडबेस के टर्म update कर दिए हैं।

मुझे नाम टकराने की समस्याएँ आ रही हैं। मेरे पास tests नाम के दो टर्म नहीं हो सकते।

एक ही नाम के दो टर्म अलग-अलग नेमस्पेस में रख सकते हैं। अगर आप Exercism के अभ्यास पूरे कर रहे हैं, तो हर अभ्यास के लिए एक अलग नेमस्पेस बनाना बेहतर है, ताकि टेस्ट और स्टब दूसरों से अलग रहें।

मेरे टेस्ट लोकल में पास हो जाते हैं, लेकिन टेस्ट रनर पर पास नहीं होते।

इसके लिए खेद है! पहले यह जाँच लीजिए कि आपके इम्पोर्ट स्टैंडर्ड लाइब्रेरी base और जिस scratch फाइल की जाँच हो रही है उसमें बनाए गए फंक्शन के अलावा किसी और चीज़ को रेफर नहीं कर रहे। अगर ऐसा है, तो कृपया हमें #track-unison Exercism Slack पर बताइए, या Unison ट्रैक रिपॉज़िटरी पर एक इशू दर्ज कीजिए।

अगर आपको कोई भी समस्या हो, तो हमें ज़रूर बताइए! 🙂