একটি ডোমেইন স্পেসিফিক ভাষা (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-এর টেস্ট কেসগুলো দেখুন।
কখনও কখনও একটি এক্সসেপশন রেইজ করা প্রয়োজন হয়। এটি করলে সবসময় একটি অর্থপূর্ণ এরর মেসেজ দিতে হবে, যাতে বোঝা যায় এররটির উৎস কী। এতে আপনার কোড আরও পাঠযোগ্য হয় এবং Debug করতে অনেক সাহায্য করে। যে সব ক্ষেত্রে আপনি জানেন এররটির উৎস একটি নির্দিষ্ট টাইপ হবে, সেখানে আপনি বিল্ট-ইন এরর টাইপগুলোর একটি রেইজ করতে পারেন, তবে তবুও একটি অর্থপূর্ণ মেসেজ দিতে হবে।
এই নির্দিষ্ট অনুশীলনীতে Graph ভুল গঠনের হলে একটি TypeError "থ্রো" করতে, আর Edge, Node বা attribute ভুল গঠনের হলে একটি ValueError দিতে raise স্টেটমেন্ট ব্যবহার করতে হবে। টেস্ট পাস হবে কেবল তখনই, যখন আপনি exception raise করবেন এবং তার সঙ্গে একটি মেসেজও দেবেন।
মেসেজসহ একটি এরর রেইজ করতে, মেসেজটি exception টাইপের আর্গুমেন্ট হিসেবে লিখুন:
# Graph is malformed
raise TypeError("Graph data malformed")
# Edge has incorrect values
raise ValueError("EDGE malformed")
Exercism-এ সাইন আপ করুন, Python ট্র্যাকের 17টি কনসেপ্ট146টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।