المسارات
/
Roc
Roc
/
التمارين
/
لغة 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 الرسم البياني الذي تحلم به.

ربما تودّ إنشاء DSL تعتمد على مصفوفات من الوسوم والسجلات، هكذا:

my_graph =
    Graph.create([
        Title("My Graph"),
        Node("a", { color: Green }),
        Node("b", { color: Blue }),
        Edge("a", "b", { style: Dotted }),
    ])

أو ربما تفضّل DSL تعتمد على استدعاءات دوال متتالية، هكذا:

my_graph =
    Graph.create()
        .with_title("My Graph")
        .add_node("a", Attr.create().with_color(Green))
        ...

أو ربما لديك خطة مختلفة تمامًا؟ امضِ قدمًا! لا تطلب منك الاختبارات سوى إنشاء بعض الرسوم البيانية المحددة، وطريقة بنائها متروكة لك تمامًا.

ومع ذلك، تكون DSL عادة أفضل إذا كانت واضحة وموجزة وغير مفاجئة أكثر من اللازم (فمثلًا، دالة minus مخصّصة للطرح، لا لبناء حافة بين عقدتين كما في node("a") - node("b")).

ولمضاعفة المتعة، يمكنك اختياريًا أن تحاول تنفيذ دالة to_dot تحوّل رسمك البياني إلى صيغة DOT!


المصدر

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

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

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