Exercism पर किसी अभ्यास को हल करना सिर्फ पहला कदम है। असली सीख तो इसके बाद शुरू होती है!
इस सप्ताह हमने अभ्यासों पर नया "Dig Deeper" टैब शुरू किया है। इस टैब का उद्देश्य है आपको हल करने के चरण से आगे ले जाना। इससे आप किसी अभ्यास की बारीकियाँ और उसके फायदे-नुकसान खुद समझ सकते हैं, और इसके लिए किसी मेंटर से पूछने की ज़रूरत नहीं पड़ती।
परिचय
हमारे अभ्यासों के हल आश्चर्यजनक रूप से अलग-अलग होते हैं।
अधिकतर ट्रैक में सबसे बुनियादी "असली" अभ्यास TwoFer है।
एक आम हल कुछ ऐसा दिखता है (यह Ruby का है, लेकिन लगभग सभी भाषाओं में इसे ऐसे ही लिखा जाता है):
module TwoFer
def self.two_fer(name='you')
"One for #{name}, one for me."
end
end
लेकिन हाल के उन 500 हलों में से, जो टेस्ट पास कर चुके थे, 350 से अधिक अपने आप में अलग थे 😲 और अगर आप खाली जगह और वेरिएबल के नाम जैसी चीज़ों को एक जैसा बना दें, तब भी आधे से अधिक हल वास्तव में अलग ही रहेंगे।
इससे यह देखना बेहद दिलचस्प हो जाता है कि हर कोई चीज़ों को कैसे हल करता है। लेकिन ऐसा करना बिल्कुल भी संभव नहीं है। Exercism पर लाखों हल हैं, और उन सबको पढ़ने में सचमुच एक पूरी ज़िंदगी लग जाएगी।
लेकिन रुकिए! हमारी टीम ने ये अभ्यास बनाए हैं और लाखों लोगों को इन्हें हल करने में मदद की है। इसलिए हमें अच्छी तरह अंदाज़ा है कि लोग इन्हें किन-किन तरीकों से हल करते हैं। इसलिए हमने नया Dig Deeper टैब जोड़ा है, जो यह दिखाता है कि किसी अभ्यास को आइडियोमैटिक तरीकों से कैसे हल किया जा सकता है, या फिर कुछ ऐसे तरीकों से जो आइडियोमैटिक नहीं हैं, लेकिन दिलचस्प ज़रूर हैं।
एक उदाहरण
चलिए एक उदाहरण से देखते हैं कि यह वास्तव में कैसे काम करता है। C# में स्ट्रिंग को उलटने के कई तरीके हैं।
आप Array.Reverse() मेथड का उपयोग कर सकते हैं:
var chars = input.ToCharArray();
Array.Reverse(chars);
return new string(chars);
या फिर LINQ पर आधारित एक छोटा तरीका अपनाइए:
return new string(input.Reverse().ToArray());
या फिर StringBuilder का उपयोग कीजिए:
var chars = new StringBuilder();
for (var i = input.Length - 1; i >= 0; i--)
{
chars.Append(input[i]);
}
return chars.ToString();
या फिर थोड़ा कम आइडियोमैटिक, लेकिन परफॉर्मेंस के लिहाज से बेहतर तरीका अपनाइए और Span<T> का उपयोग कीजिए:
Span<char> chars = stackalloc[input.Length];
for (var i = 0; i < input.Length; i++)
{
chars[input.Length - 1 - i] = input[i];
}
return new string(chars);
इनमें से हर एक को हम एक Approach कहते हैं, और हर एक के बारे में समझाने वाला अपना अलग लेख है। इस अभ्यास के लिए Dig Deeper पेज इन सबको एक जगह लाता है, और उसके साथ परफॉर्मेंस पर एक लेख भी है जो इनके फायदे-नुकसान बताता है।
👉🏾 इसे देखिए (अगर आपने अभी यह अभ्यास हल नहीं किया है, तो आपको इनकॉग्निटो मोड की ज़रूरत होगी)
लेकिन अभी और भी है!
इन अलग-अलग तरीकों पर लेखों के साथ-साथ, हमारी कम्युनिटी ने हज़ारों वीडियो भी बनाए हैं। इन वीडियो में लोग अभ्यासों पर चर्चा करते हैं, वॉकथ्रू रिकॉर्ड करते हैं, लाइव कोडिंग सत्र करते हैं, और इस बात की गहराई में जाते हैं कि आइडियोमैटिक हल बनते कैसे हैं। हम इन सारे वीडियो को इकट्ठा करके इन पेजों पर ला रहे हैं।
आप भी जुड़िए
अगले कुछ सप्ताह में आपको साइट के अलग-अलग अभ्यासों पर Dig Deeper टैब दिखने लगेगा।
अगर आप कोई Approach, किसी अभ्यास पर लेख, या अपने वीडियो हमें बताना चाहते हैं ताकि हम उन्हें जोड़ सकें, तो jonathan@exercism.org पर संपर्क कीजिए। वे आपको शुरू करने में मदद करेंगे।
और अंत में, हमें बताइए कि आपको यह कैसा लगा, और अपने विचार और सुझाव फोरम पोस्ट में ज़रूर लिखिए!