DOT DSL

DOT DSL

Mittel

Anleitung

Eine domänenspezifische Sprache (DSL) ist eine kleine Sprache, die auf einen bestimmten Bereich zugeschnitten ist. Da eine DSL auf einen bestimmten Zweck ausgerichtet ist, kann sie Produktivität und Verständnis stark verbessern: Du beschreibst was du willst, statt wie.

Ein Problembereich, in dem sie eingesetzt werden, sind komplexe Anpassungen und Konfigurationen.

Zum Beispiel erlaubt dir die DOT-Sprache, eine Textbeschreibung eines Graphen zu schreiben, die dann von einem der Graphviz-Tools (wie dot) in ein Bild umgewandelt wird. Ein einfacher Graph sieht so aus:

graph {
    graph [bgcolor="yellow"]
    a [color="red"]
    b [color="blue"]
    a -- b [color="green"]
}

Wenn du das in eine Datei example.dot schreibst und dot example.dot -T png -o example.png ausführst, entsteht ein Bild example.png: ein roter und ein blauer Kreis, die durch eine grüne Linie auf gelbem Hintergrund verbunden sind.

Schreibe eine domänenspezifische Sprache, die der Graphviz-DOT-Sprache ähnelt.

Unsere DSL ähnelt der Graphviz-DOT-Sprache insofern, als sie zur Erstellung von Graph-Datenstrukturen verwendet wird. Anders als die DOT-Sprache ist unsere DSL jedoch eine interne DSL, die nur in unserer Programmiersprache verwendet wird.

Erfahre mehr über den Unterschied zwischen internen und externen DSLs.

Beschreibung der DSL

Ein Graph ist in dieser DSL ein Objekt vom Typ Graph. Dieser nimmt eine list mit einem oder mehreren Tupeln entgegen, die Folgendes beschreiben:

  • Attribute
  • Nodes
  • Edges

Die Implementierungen von Node und Edge findest du in dot_dsl.py.

Weitere Details zum erwarteten Aufbau der DSL und zu den erwarteten Fehlertypen und -meldungen findest du in den Testfällen in dot_dsl_test.py

Ausnahmemeldungen

Manchmal ist es notwendig, eine Ausnahme auszulösen. Dabei solltest du immer eine aussagekräftige Fehlermeldung angeben, die angibt, woher der Fehler stammt. Das macht deinen Code lesbarer und hilft beim Debugging erheblich. Wenn du weißt, dass die Fehlerquelle von einem bestimmten Typ ist, kannst du eine der eingebauten Fehlertypen auslösen, solltest aber trotzdem eine aussagekräftige Meldung angeben.

Diese Übung verlangt, dass du mit der raise-Anweisung einen TypeError auslöst, wenn ein Graph fehlerhaft ist, und einen ValueError, wenn ein Edge, Node oder attribute fehlerhaft ist. Die Tests bestehen nur, wenn du die exception sowohl mit raise auslöst als auch eine Meldung dazu angibst.

Um einen Fehler mit einer Meldung auszulösen, gibst du die Meldung als Argument für den exception-Typ an:

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

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

Quelle

WikipediaDer Link öffnet sich in einem neuen Fenster oder Tab
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Python Exercism

Bereit, mit DOT DSL zu starten?

Melde dich bei Exercism an, um Python mit 17 Konzepte146 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.