Exercism पर अपने Unison अभ्यासों को टेस्ट करना सीखिए।
Unison Codebase Manager (UCM) वह टूल है जो Unison प्रोग्रामिंग भाषा को चलाता है और आपको अपने लिखे और सहेजे गए Unison कोड को देखने और उसमें ढूँढ़ने देता है।
💡 याद रखिए: Unison कोड टेक्स्ट आधारित फाइल की तरह सहेजा नहीं जाता। इसीलिए हमें एक ऐसा टूल चाहिए जिससे हम Unison प्रोग्राम बदल सकें और चला सकें।
Unison कोड लिखना उतना ही आसान है जितना अपना पसंदीदा टर्मिनल खोलना और उस डायरेक्टरी में ucm कमांड चलाना जहाँ आप अपना Unison कोड लिखेंगे। इसके बाद आप अपने पसंदीदा टेक्स्ट एडिटर में .u एक्सटेंशन वाली फाइल बना या खोल सकते हैं, जैसे scratch.u या hello.u। आपके वर्कफ्लो का ज़्यादा हिस्सा चल रहे ucm कमांड लाइन इंस्टेंस और अपनी .u फाइल के बीच आने-जाने में ही बीतेगा। फाइल सहेजते ही UCM अपने आप आपकी .u फाइल के बदलावों को पकड़ लेता है।
डायरेक्टरी संरचना की जगह Unison कोडबेस "नेमस्पेस" के ज़रिए व्यवस्थित किए जाते हैं। आप स्टैंडर्ड लाइब्रेरी के base नामक नेमस्पेस में उपयोगी फंक्शन और डेटा टाइप ढूँढ़ते रहेंगे, और साथ ही Unison कोड लिखते-लिखते अपने खुद के नेमस्पेस भी बनाएँगे। UCM में कोडबेस के अंदर घूमने-फिरने के लिए ls और view कमांड इस्तेमाल होते हैं। ये क्रमशः नेमस्पेस की सामग्री सूचीबद्ध करने और सोर्स कोड देखने के काम आते हैं।
आप UCM CLI से अपना कोडबेस देख सकते हैं और उसमें घूम सकते हैं, लेकिन आप अपने काम का एक अच्छा ग्राफिकल रूप भी देखना चाहेंगे। इसके लिए UCM CLI में ui कमांड चलाइए। यह एक ब्राउज़र विंडो खोल देगा जिसमें आपके कोडबेस का कोड दिखेगा। लोकल कोडबेस UI हमारी स्टैंडर्ड लाइब्रेरी base के फंक्शन खोजने का भी बढ़िया तरीका है, और ये फंक्शन अभ्यास पूरे करने में काम आ सकते हैं। लोकल कोडबेस UI के बारे में और पढ़िए।
आप Unison भाषा टूर के साथ Unison का प्रोग्रामिंग वर्कफ्लो आज़मा सकते हैं।
कमांड project.create से एक नया प्रोजेक्ट बनाइए और उसका नाम दीजिए (जैसे project.create hello-world)
UCM को अभ्यास की डायरेक्टरी पर नज़र रखते हुए, अपने बदलाव <myFileName>.u फाइल में कीजिए
<myFileName>.u फाइल सहेजिए
अगर फाइल टाइपचेक हो जाए, तो add या update UCM कमांड चलाइए
<myFileName>.u फाइल के कोड में तब तक बदलाव कीजिए जब तक वह कंपाइल न हो जाएटेस्ट को स्कोप में लाने और उन्हें चलाने के लिए UCM CLI में load <myFileName>.test.u कमांड चलाइए
अगर आप कमांड लाइन पर कोई Exercism अभ्यास कर रहे हैं, तो सबसे संभव है कि आप अपना हल उसी अभ्यास के नाम वाली डायरेक्टरी में लिखेंगे। जैसे, अगर अभ्यास hello-world है, तो आपको ~/exercism/unison/hello-world में cd करने के बाद कमांड लाइन से ucm खोलना चाहिए और उसमें एक प्रोजेक्ट बनाना चाहिए (जैसे project.create hello-world)। अपने बदलाव hello.u फाइल में कीजिए, और जब आप अपने हल से संतुष्ट हो जाएँ, तो Unison कोडबेस मैनेजर CLI (UCM) में add या update कमांड डालिए ताकि फाइल में किया गया आपका काम कोडबेस में जुड़ जाए।
हर अभ्यास के टेस्ट जिस फाइल में होते हैं, उसके नाम के अंत में .test.u होता है। टेस्ट को स्कोप में लाने और उन्हें चलाने के लिए आपको UCM में load कमांड इस्तेमाल करना होगा। load कमांड अपने आर्गुमेंट के रूप में फाइल का पाथ लेता है। hello world अभ्यास और hello-world प्रोजेक्ट के लिए यह कुछ ऐसा दिखेगा:
hello-world/main> load hello.test.u
आपको UCM से एक संदेश दिखेगा जिसमें बताया जाएगा कि कौन-कौन से टर्म स्कोप में आए और, सबसे ज़रूरी बात, टेस्ट चलाने का परिणाम भी दिखेगा:
⍟ These new definitions are ok to `add`:
hello.test : Test.Test
tests : [Result]
Now evaluating any watch expressions (lines starting with
`>`)... Ctrl+C cancels.
6 | test> tests = runAll [hello.test]
🚫 FAILED
मान लीजिए पहली बार आपके टेस्ट पास नहीं हुए। वापस अपनी myExercise.u फाइल संपादित करने पर लौटिए, और सहेजते ही आप update कर सकते हैं
I found and typechecked these definitions in ~/Exercism/unison/hello-world/hello.u. If you do an
`add` or `update`, here's how your codebase would change:
⍟ These names already exist. You can `update` them to your new definition:
hello : Text
hello-world/main> update
⍟ I've updated these names to your new definition:
hello : Text
अब हम अपने टेस्ट फिर से लोड करके देख सकते हैं कि कुछ बदला या नहीं!
hello-world/main> load hello.test.u
Now evaluating any watch expressions (lines starting with `>`)... Ctrl+C cancels.
6 | test> tests = runAll [hello.test]
✅ Passed : Passed 1 tests.
अपने कोडबेस के साथ काम करने के लिए उपलब्ध कमांड की सूची देखने के लिए Unison Codebase Manager CLI में help चलाइए। UCM कमांड की सूची हमारी वेबसाइट पर भी दी गई है। यहाँ कुछ कमांड हैं जो काम आ सकते हैं:
add: .u फाइल से नई परिभाषाएँ कोडबेस में जोड़ता है।update: add की तरह ही काम करता है, बस फर्क यह है कि अगर फाइल की किसी परिभाषा का नाम किसी मौजूदा परिभाषा से मिलता है, तो वह नाम नई परिभाषा की ओर इशारा करने के लिए अपडेट हो जाता है।
update संभव होने पर बदलाव अपने आप आगे फैला देगा, वरना आगे के रिफैक्टरिंग के लिए एक todo आइटम बना देगा।load: दी गई .u वाली स्क्रैच फाइल को पार्स, टाइपचेक और इवैल्यूएट करता है। टाइपचेक और इवैल्यूएट हो जाने के बाद आप उन टर्म को अपने कोडबेस में जोड़ सकते हैं।ls: किसी नेमस्पेस की सामग्री सूचीबद्ध करता हैview: किसी दी गई Unison परिभाषा का सोर्स कोड देखता हैui: लोकल कोडबेस UI खोलता हैexit: UCM बंद करता है