المسارات
/
Python
Python
/
التمارين
/
لغة DOT الخاصة بمجال
لغة DOT الخاصة بمجال

لغة DOT الخاصة بمجال

متوسط

التعليمات

اللغة الخاصة بمجال معين (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 فيها دائرة حمراء ودائرة زرقاء يربط بينهما خط أخضر على خلفية صفراء.

اكتب لغة خاصة بمجال معين مشابهة للغة dot الخاصة بـ Graphviz.

لغة المجال الخاصة بنا مشابهة للغة dot الخاصة بـ Graphviz من حيث إنها ستُستخدم لإنشاء بنى بيانات الرسوم البيانية. لكن، بخلاف لغة DOT، ستكون لغة المجال الخاصة بنا لغة داخلية تُستخدم داخل لغتنا فقط.

تعرّف أكثر على الفرق بين لغات المجال الداخلية والخارجية.

وصف DSL

الرسم البياني في هذه الـ DSL هو كائن من النوع Graph. وهو يستقبل list مكوّنة من صفّ واحد أو أكثر تصف:

  • السمات
  • Nodes
  • Edges

تجد تطبيقات Node وEdge موجودة في dot_dsl.py.

لمزيد من التفاصيل حول التصميم المتوقع لهذه الـ DSL وأنواع الأخطاء والرسائل المتوقعة، ألقِ نظرة على حالات الاختبار في dot_dsl_test.py.

رسائل الاستثناءات

أحيانًا تحتاج إلى رفع استثناء. وعندما تفعل ذلك، ينبغي أن تُضمّن دائمًا رسالة خطأ ذات معنى توضّح مصدر الخطأ. فهذا يجعل الكود أكثر وضوحًا ويساعد كثيرًا في تصحيح الأخطاء. وفي الحالات التي تعرف فيها أن مصدر الخطأ سيكون من نوع معيّن، يمكنك أن تختار رفع أحد أنواع الأخطاء المضمّنة، لكن يجب أن تُضمّن معه رسالة ذات معنى.

يتطلّب هذا التمرين تحديدًا أن تستخدم جملة raise لكي "ترفع" استثناء TypeError عندما يكون Graph غير صالح، واستثناء ValueError عندما يكون Edge أو Node أو attribute غير صالح. لن تنجح الاختبارات إلا إذا استخدمت raise مع exception وأضفت معه رسالة.

ولرفع خطأ مع رسالة، اكتب الرسالة كوسيط لنوع exception:

# Graph is malformed
raise TypeError("Graph data malformed")

# Edge has incorrect values
raise ValueError("EDGE malformed")

المصدر

ويكيبيديايفتح الرابط في نافذة أو علامة تبويب جديدة
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Python Exercism

مستعد لبدء لغة DOT الخاصة بمجال؟

سجّل في Exercism لتتعلّم وتتقن Python عبر 17 مفهومًا146 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.