एक प्रैक्टिस अभ्यास जोड़िए


यह दस्तावेज़ समझाता है कि नया प्रैक्टिस अभ्यास कैसे जोड़ा जाए।

अभ्यास चुनिए

यह पता लगाने का सबसे आसान तरीका कि कौन-कौन से प्रैक्टिस अभ्यास अभी तक नहीं बनाए गए हैं, यह है कि आप ट्रैक के बिल्ड पेज (जैसे https://exercism.org/tracks/csharp/build) पर जाइए और "प्रैक्टिस अभ्यास" वाला हिस्सा देखिए।

Caution

बिल्ड पेज का डेटा दिन में एक बार अपडेट होता है।

अभ्यास का स्कैफोल्ड बनाइए

ट्रैक की रूट डायरेक्टरी से bin/add-practice-exercise स्क्रिप्ट (स्रोत) चलाकर आप जल्दी से नए प्रैक्टिस अभ्यास का स्कैफोल्ड बना सकते हैं:

bin/add-practice-exercise <exercise-slug>

चाहें तो आप अभ्यास की कठिनाई (-d से) और/या लेखक का GitHub यूज़रनेम (-a से) भी बता सकते हैं:

bin/add-practice-exercise -d 3 -a foobar <exercise-slug>
Note

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

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

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

  • टेस्ट फाइल में टेस्ट जोड़ना
  • एक उदाहरण इम्प्लीमेंटेशन जोड़ना
  • स्टब फाइल की सामग्री तय करना
  • अभ्यास की .meta/config.json फाइल में:
    • अभ्यास के लेखकों का GitHub यूज़रनेम authors में जोड़ना
  • ट्रैक की config.json फाइल में:
    • अभ्यास की कठिनाई जाँचना या अपडेट करना
    • practices में कॉन्सेप्ट जोड़ना (यह तभी ज़रूरी है जब ट्रैक में कॉन्सेप्ट अभ्यास हों)
    • prerequisites में कॉन्सेप्ट जोड़ना (यह तभी ज़रूरी है जब ट्रैक में कॉन्सेप्ट अभ्यास हों)

टेस्ट जोड़िए

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

  1. problem-specifications रेपो में अभ्यास की जो canonical-data.json फाइल मिलती है, उसके टेस्ट केस इस्तेमाल करके टेस्ट शुरू से लिखना।
  2. किसी दूसरे ट्रैक के इम्प्लीमेंटेशन से टेस्ट पोर्ट करना (सुझाव: यह देखने के लिए कि किसी खास अभ्यास को किन-किन ट्रैकों ने बनाया है, https://exercism.org/exercises/<slug> पर जाइए)।

दूसरा तरीका खास तौर पर अच्छा लग सकता है, क्योंकि इससे आपको जल्दी नतीजे मिल जाते हैं। लेकिन ध्यान रखिए कि इम्प्लीमेंटेशन को अपने ट्रैक के हिसाब से बदलना चाहिए। उदाहरण के लिए, कुछ ट्रैक क्लास का इस्तेमाल नहीं करते और सिर्फ फंक्शन के साथ काम करते हैं। लेकिन अगर आपका ट्रैक आम तौर पर ऑब्जेक्ट के साथ काम करता है, तो इम्प्लीमेंटेशन को अपने ट्रैक के मुताबिक ढाल लीजिए।

Note

कुछ ट्रैक अभ्यास की टेस्ट फाइल अपने आप (दोबारा) बनाने के लिए टेस्ट जनरेटर का इस्तेमाल करते हैं। ट्रैक के दस्तावेज़ में देख लीजिए कि कोई टेस्ट जनरेटर है या नहीं, और अगर है तो उसे कैसे इस्तेमाल किया जाए।

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

यह पक्का करने के लिए कि टेस्ट पास करने वाला कोड लिखना संभव है, एक उदाहरण इम्प्लीमेंटेशन जोड़ना होता है।

Note

कोड का आइडियोमैटिक होना ज़रूरी नहीं है, ज़रूरी बस इतना है कि वह टेस्ट पास करे।

ट्रैक की रूट डायरेक्टरी से bin/verify-exercises स्क्रिप्ट (स्रोत) चलाकर आप जाँच सकते हैं कि उदाहरण इम्प्लीमेंटेशन सारे टेस्ट पास करता है:

bin/verify-exercises <exercise-slug>

आउटपुट की मदद से जाँच लीजिए कि उदाहरण इम्प्लीमेंटेशन सारे टेस्ट पास करता है।

Note

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

Advanced

भीतर से देखें तो bin/verify-exercises स्क्रिप्ट कई काम करती है:

  • अभ्यास को एक अस्थायी डायरेक्टरी में कॉपी करती है
  • स्टब फाइल के ऊपर उदाहरण इम्प्लीमेंटेशन फाइल लिख देती है
  • अगर टेस्ट फाइल में छोड़े गए टेस्ट हैं, तो उन्हें दोबारा चालू कर देती है
  • टेस्ट चलाती है

स्टब फाइल जोड़िए

स्टब इम्प्लीमेंटेशन फाइलें छात्रों के लिए शुरुआत का बिंदु होती हैं।

हमारा सुझाव है कि स्टब फाइलों में कोड उतना ही कम रहे कि:

  • छात्र तुरंत टेस्ट पास करने वाला लॉजिक लिखना शुरू कर सके
  • छात्र के सामने "अजीब" सिंटैक्स एरर न आए

व्यवहार में इसका मतलब है कि उन फंक्शन और मेथड को बनाया जाए जिन्हें टेस्ट सूट जाँचता है। यह कोड ट्रैक जिस तरह चाहें लिख सकते हैं, बस यह पक्का कर लें कि शुरू में स्टब कोड सारे टेस्ट फेल करे।

उदाहरण

Python:

def two_fer(name):
    pass

Kotlin:

fun twofer(name: String): String {
    TODO("Implement the function to complete the task")
}

अभ्यास पर लिंट चलाइए

अंतिम कदम है लिंटर चलाकर यह जाँचना कि ट्रैक की (कॉन्फ़िगरेशन) फाइलें दोनों सिंटैक्स और अर्थ के हिसाब से सही ढंग से बनी हैं या नहीं।

सबसे पहले यह पक्का कीजिए कि आपके पास configlet का सबसे नया वर्ज़न है। इसके लिए यह चलाइए:

bin/fetch-configlet

इसके बाद लिंटर चलाइए:

bin/configlet lint

आउटपुट देखकर जाँच लीजिए कि सब ठीक है।

पुल रिक्वेस्ट सबमिट कीजिए

सब ठीक हो जाने के बाद आप ट्रैक की रेपो में पुल रिक्वेस्ट सबमिट कर सकते हैं।

सबमिट करने से पहले योगदानकर्ताओं की पुल रिक्वेस्ट गाइड और पुल रिक्वेस्ट गाइड पढ़ लीजिए।

ध्यान रखिए कि PR के विवरण में यह ज़रूर लिखा हो कि कौन-सा अभ्यास जोड़ा जा रहा है।