एक डोमेन स्पेसिफिक लैंग्वेज (DSL) एक छोटी भाषा होती है जो किसी खास क्षेत्र के लिए बनाई जाती है। चूँकि DSL किसी खास क्षेत्र के लिए बनाई जाती है, यह लिखने वाले को यह घोषित करने का मौका देती है कि उसे क्या चाहिए, न कि कैसे। इससे उत्पादकता और समझ पर बड़ा असर पड़ सकता है।
जटिल कस्टमाइज़ेशन और कॉन्फिगरेशन एक ऐसा क्षेत्र है जहाँ इनका इस्तेमाल होता है।
उदाहरण के लिए, DOT भाषा की मदद से आप किसी ग्राफ का टेक्स्ट में विवरण लिख सकते हैं। फिर Graphviz के किसी टूल (जैसे dot) की मदद से उस विवरण को एक तस्वीर में बदल दिया जाता है।
एक साधारण ग्राफ ऐसा दिखता है:
graph {
graph [bgcolor="yellow"]
a [color="red"]
b [color="blue"]
a -- b [color="green"]
}
इसे example.dot फाइल में रखकर dot example.dot -T png -o example.png चलाने पर एक इमेज example.png बनती है, जिसमें पीले बैकग्राउंड पर हरी रेखा से जुड़े लाल और नीले वृत्त होते हैं।
Graphviz की dot भाषा जैसी एक डोमेन स्पेसिफिक लैंग्वेज लिखिए।
हमारी DSL Graphviz की dot भाषा जैसी है, क्योंकि हमारी DSL का इस्तेमाल भी ग्राफ डेटा स्ट्रक्चर बनाने के लिए होगा। लेकिन DOT भाषा से अलग, हमारी DSL एक इंटरनल DSL होगी, जिसका इस्तेमाल सिर्फ हमारी भाषा में ही होगा।
इंटरनल और एक्सटर्नल DSL के अंतर के बारे में और जानिए।
इस DSL में ग्राफ Graph टाइप का एक ऑब्जेक्ट होता है। यह एक या अधिक टपल की एक list लेता है, जो इनका वर्णन करते हैं:
NodesEdgesNode और Edge के इम्प्लीमेंटेशन dot_dsl.py में दिए गए हैं।
DSL के अपेक्षित डिज़ाइन और अपेक्षित एरर टाइपों तथा संदेशों की अधिक जानकारी के लिए dot_dsl_test.py में दिए गए टेस्ट केस देखिए।
कभी-कभी एक्सेप्शन उठाना आवश्यक होता है। ऐसा करते समय आपको हमेशा एक अर्थपूर्ण एरर संदेश शामिल करना चाहिए, ताकि पता चले कि एरर का स्रोत क्या है। इससे आपका कोड पढ़ने में आसान हो जाता है और डिबगिंग में काफी मदद मिलती है। ऐसी स्थितियों में, जहाँ आप जानते हैं कि एरर का स्रोत कोई निश्चित टाइप होगा, आप पहले से मौजूद एरर टाइप में से कोई एक उठाना चुन सकते हैं, लेकिन तब भी एक अर्थपूर्ण संदेश ज़रूर शामिल कीजिए।
इस अभ्यास में आपको raise स्टेटमेंट से एक TypeError "फेंकना" होता है, जब Graph ठीक से नहीं बना हो, और जब Edge, Node या attribute ठीक से नहीं बना हो, तब एक ValueError फेंकना होता है। टेस्ट तभी पास होंगे जब आप exception को raise करें और उसके साथ एक संदेश भी दें।
किसी एरर को संदेश के साथ उठाने के लिए संदेश को exception टाइप के आर्गुमेंट के रूप में लिखिए:
# Graph is malformed
raise TypeError("Graph data malformed")
# Edge has incorrect values
raise ValueError("EDGE malformed")
Exercism पर साइन अप कीजिए और Python को 17 कॉन्सेप्ट146 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।