पहला अभ्यास जोड़िए


हर ट्रैक पर पहला अभ्यास एक बहुत ही सरल "Hello, World!" अभ्यास होता है।

इस अभ्यास का उद्देश्य यह जल्दी से पक्का करना है कि सब कुछ ठीक से जुड़ा हुआ है। इससे पुष्टि होती है कि उपयोगकर्ता ने प्रोग्रामिंग एनवायरनमेंट सही तरीके से इंस्टॉल किया है, उसे टेस्ट चलाना आता है, और वह उन्हें पास करा पाता है। इसके अलावा, Exercism कमांड-लाइन क्लाइंट (CLI) के मामले में यह यह भी सुनिश्चित करता है कि उपयोगकर्ता ने CLI ठीक से इंस्टॉल और कॉन्फ़िगर किया है, और साइट अभ्यास के लिए सही फाइलें भेजती है, बिना कोई अनावश्यक आर्टिफैक्ट भेजे। अंत में, यह सुनिश्चित करता है कि उपयोगकर्ता इस चक्र से परिचित है: CLI की मदद से अभ्यास डाउनलोड करना, अपने लोकल डेवलपमेंट एनवायरनमेंट में कोई समस्या हल करना, और अपना हल वापस साइट पर जमा करना।

दूसरे शब्दों में, अभी यह भाषा के बारे में कुछ सीखने की बात नहीं है। हमारा लक्ष्य कुछ बहुत ही आसान है।

ट्रैक रिपॉज़िटरी को ठीक से सेट अप करने में यह शायद सबसे मुश्किल हिस्सा भी होगा, क्योंकि एक अभ्यास इम्प्लीमेंट करने में कई अलग-अलग चीज़ें एक साथ संभालनी पड़ती हैं।

अभ्यास इम्प्लीमेंट करना

"Hello, World!" अभ्यास के लिए कुछ खास नियम हैं:

  • यह हमेशा ट्रैक का पहला अभ्यास होता है
  • हर ट्रैक को इसे इम्प्लीमेंट करना ही होता है
  • टेस्ट फाइल में सिर्फ एक टेस्ट होता है
  • स्टब फाइल में लगभग काम करने वाला इम्प्लीमेंटेशन होता है, लेकिन "Hello, World!" की जगह उसमें "Goodbye, Mars!" होता है
  • इसमें कोई prerequisites नहीं होता
  • इसमें कोई practices नहीं होता

फाइल पाथ तय कीजिए

"Hello, World!" अभ्यास (और दरअसल, Exercism के सभी अभ्यासों) के लिए कुछ खास फाइलें ज़रूरी होती हैं:

  • डॉक्युमेंटेशन: विद्यार्थी को समझाता है कि उसे क्या करना है (इसे ऑटो-जनरेट किया जा सकता है)।
  • मेटाडेटा: Exercism को अभ्यास के बारे में कुछ जानकारी देता है (इसे ज़्यादातर ऑटो-जनरेट किया जा सकता है)।
  • टेस्ट सूट: जाँचता है कि हल सही है या नहीं (ट्रैक के हिसाब से अलग)।
  • स्टब इम्प्लीमेंटेशन: विद्यार्थियों को शुरुआत करने का एक बिंदु देता है (ट्रैक के हिसाब से अलग)।
  • उदाहरण इम्प्लीमेंटेशन: एक ऐसा उदाहरण इम्प्लीमेंटेशन देता है जो सारे टेस्ट पास करता है (ट्रैक के हिसाब से अलग)।
  • अतिरिक्त फाइलें: यह सुनिश्चित करती हैं कि टेस्ट चल सकें (ट्रैक के हिसाब से अलग, वैकल्पिक)।

"Hello, World!" अभ्यास बनाने से पहले आपको ट्रैक के हिसाब से फाइलों के नाम और फाइल पाथ तय करने होंगे (टेस्ट सूट, स्टब इम्प्लीमेंटेशन, उदाहरण इम्प्लीमेंटेशन और कोई भी अतिरिक्त फाइलें)।

सामान्य नियम यह है कि ऐसे नाम चुनें जो उस भाषा के लिए स्वाभाविक हों। जहाँ कोई खास पसंद न हो, वहाँ कम गहरी डायरेक्टरी संरचना चुनें। उदाहरण इम्प्लीमेंटेशन को CI स्क्रिप्ट पहचान सके, इसलिए एक सामान्य बेसनेम चुनना बेहतर है जिसे हर अभ्यास इस्तेमाल कर सके, जैसे example, sample, या reference-solution।

फाइल पाथ कॉन्फ़िगर करना

ट्रैक के हिसाब से फाइल पाथ चुन लेने के बाद, आपको उन्हें रूट config.json फाइल की files की में कॉन्फ़िगर करना चाहिए। files की सभी अभ्यासों के लिए टेम्पलेट का काम करती है, जिससे कोई भी टूलिंग (जिनमें से कुछ हम थोड़ी देर में इस्तेमाल करेंगे) जान सके कि फाइलें कहाँ देखनी हैं। अभ्यास के स्लग (hello-world इस मामले में) को आसानी से कॉन्फ़िगर करने के लिए आप अलग-अलग प्लेसहोल्डर इस्तेमाल कर सकते हैं।

उदाहरण

अगर आपका ट्रैक अपनी फाइलों के लिए PascalCase इस्तेमाल करता है, तो files की कुछ ऐसी दिख सकती है:

"files": {
  "solution": [
    "%{pascal_slug}.cs"
  ],
  "test": [
    "%{pascal_slug}Tests.cs"
  ],
  "example": [
    ".meta/Example.cs"
  ]
}
Note

उदाहरण फाइल या फाइलों को .meta डायरेक्टरी के अंदर रखा जाना चाहिए।

ज़्यादा जानकारी के लिए files की का डॉक्युमेंटेशन देखिए।

फाइलें बनाना

फाइल पाथ टेम्पलेट तय कर लेने के बाद, आप ट्रैक की रूट डायरेक्टरी से ये कमांड चलाकर "Hello, World!" अभ्यास की फाइलें जल्दी से बना सकते हैं:

bin/fetch-configlet
bin/configlet create --practice-exercise hello-world

लेखक तय कीजिए

वेबसाइट पर आपको अभ्यास के लेखक के रूप में दिखाने के लिए ये चरण अपनाइए:

अभ्यास की .meta/config.json फाइल में:

  • अपना GitHub यूज़रनेम authors की में जोड़िए

इसके लिए आपको अपना Exercism अकाउंट GitHub से लिंक करना होगा। यह आप वेबसाइट पर सेटिंग्स पेज के इंटिग्रेशन सेक्शन में कर सकते हैं।

Note

अभ्यास के लेखकों को प्रतिष्ठा भी मिलती है

स्क्रिप्ट का इस्तेमाल कीजिए

नए ट्रैक रिपॉज़िटरी नए अभ्यास जोड़ने के लिए bin/add-practice-exercise स्क्रिप्ट (सोर्स) इस्तेमाल कर सकती हैं:

bin/add-exercise -a <github_username> two-fer
Note

अगर आप ऐसी ट्रैक रिपॉज़िटरी पर काम कर रहे हैं जिसमें यह फाइल नहीं है, तो ऊपर दिए सोर्स लिंक की मदद से इन स्क्रिप्टों को अपनी रिपॉज़िटरी में कॉपी कर सकते हैं।

अभ्यास इम्प्लीमेंट कीजिए

स्कैफोल्ड की गई फाइलें बन जाने के बाद आपको ये करना होगा:

  • टेस्ट फाइल में टेस्ट जोड़िए
  • एक उदाहरण इम्प्लीमेंटेशन जोड़िए
  • स्टब फाइल की सामग्री तय कीजिए

टेस्ट जोड़ना

अभ्यास जोड़ने का एक अहम हिस्सा टेस्ट जोड़ना है। मोटे तौर पर, ऊपर बताए अभ्यासों में से किसी को इम्प्लीमेंट करते समय दो विकल्प होते हैं:

  1. अभ्यास की canonical-data.json के टेस्ट केस इस्तेमाल करके टेस्ट शुरू से इम्प्लीमेंट कीजिए
  2. किसी दूसरे ट्रैक के इम्प्लीमेंटेशन से टेस्ट पोर्ट कीजिए (सुझाव: https://exercism.org/exercises/hello-world पर जाकर देखिए कि किन ट्रैकों ने कोई खास अभ्यास इम्प्लीमेंट किया है)।

"Hello, World!" अभ्यास के लिए सिर्फ एक टेस्ट केस होगा, इसलिए दोनों में से कोई भी विकल्प ठीक रहेगा।

उदाहरण इम्प्लीमेंटेशन जोड़ना

उदाहरण इम्प्लीमेंटेशन फाइल में टेस्ट पास करने के लिए ज़रूरी कोड होना चाहिए।

स्टब तय कीजिए

स्टब फाइल में टेस्ट के लिए लगभग काम करने वाला हल होना चाहिए, लेकिन "Hello, World!" टेक्स्ट की जगह "Goodbye, Mars!" होना चाहिए। सुझाव: उदाहरण हल को कॉपी-पेस्ट करके उसमें थोड़ा बदलाव कर लीजिए।

अभ्यास के लेखकों को अपडेट कीजिए

अभ्यास पूरा कर लेने के बाद, कृपया अपना GitHub यूज़रनेम अभ्यास की .meta/config.json फाइल की "authors" ऐरे में जोड़िए। इससे यह पक्का होगा कि अभ्यास बनाने का श्रेय आपको सही तरीके से मिले।

लिंटिंग

यह जाँचने के लिए कि अभ्यास सही तरीके से सेट अप हुआ है, आप configlet टूल की बिल्ट-इन लिंटिंग सुविधा इस्तेमाल कर सकते हैं।

पहला कदम है configlet टूल लाना, जिसके लिए हमने दो स्क्रिप्ट बनाई हैं:

  • bin/fetch-configlet: *nix या macOS इस्तेमाल करते समय इसे चलाइए
  • bin/fetch-configlet.ps1: Windows इस्तेमाल करते समय इसे चलाइए

ट्रैक की रेपो की रूट डायरेक्टरी से इनमें से कोई एक स्क्रिप्ट चलाने पर bin/configlet या bin/configlet.exe बाइनरी डाउनलोड हो जाएगी।

इसके बाद आप bin/configlet lint चलाकर अभ्यास के सही होने की जाँच कर सकते हैं।

Note

ऐसा हो सकता है कि configlet यह एरर दिखाए:

The `tags` array is empty:
/path/to/track/config.json

यह एरर लॉन्च की तैयारी चरण में ठीक कर दिया जाएगा, तो आप या तो:

  • एरर को (अभी के लिए) नज़रअंदाज़ करें, या
  • टैग जोड़कर एरर ठीक कर दें
Note

configlet वर्कफ्लो हर बार जब main पर या किसी पुल रिक्वेस्ट पर कुछ पुश किया जाता है, तो अपने आप configlet lint चलाता है।