DOT DSL

DOT DSL

Μέτριο

Οδηγίες

Μια Γλώσσα Ειδικού Τομέα (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 με έναν κόκκινο και έναν μπλε κύκλο ενωμένους με μια πράσινη γραμμή πάνω σε κίτρινο φόντο.

Γράψε μια Γλώσσα Ειδικού Τομέα παρόμοια με τη γλώσσα dot της Graphviz.

Η DSL μας μοιάζει με τη γλώσσα dot της Graphviz στο ότι θα χρησιμοποιηθεί για τη δημιουργία δομών δεδομένων γράφων. Ωστόσο, σε αντίθεση με τη γλώσσα DOT, η DSL μας θα είναι μια εσωτερική DSL, για χρήση μόνο στη δική μας γλώσσα.

Μάθε περισσότερα για τη διαφορά ανάμεσα στις εσωτερικές και τις εξωτερικές DSL.

Περιγραφή της DSL

Ένα γράφημα, σε αυτή τη DSL, είναι ένα αντικείμενο τύπου Graph. Αυτό παίρνει μια list από μία ή περισσότερες πλειάδες που περιγράφουν:

  • χαρακτηριστικά
  • Nodes
  • Edges

Οι υλοποιήσεις ενός Node και ενός Edge παρέχονται στο dot_dsl.py.

Για περισσότερες λεπτομέρειες σχετικά με τον αναμενόμενο σχεδιασμό της DSL και τους αναμενόμενους τύπους σφαλμάτων και τα μηνύματά τους, ρίξε μια ματιά στις περιπτώσεις δοκιμών στο dot_dsl_test.py

Μηνύματα εξαίρεσης

Μερικές φορές είναι απαραίτητο να πετάξεις μια εξαίρεση. Όταν το κάνεις αυτό, θα πρέπει πάντα να συμπεριλαμβάνεις ένα μήνυμα σφάλματος με νόημα που να δείχνει ποια είναι η πηγή του σφάλματος. Αυτό κάνει τον κώδικά σου πιο ευανάγνωστο και βοηθάει σημαντικά στο debugging. Σε περιπτώσεις όπου γνωρίζεις ότι η πηγή του σφάλματος θα είναι συγκεκριμένου τύπου, μπορείς να επιλέξεις να πετάξεις έναν από τους ενσωματωμένους τύπους σφαλμάτων, αλλά και πάλι θα πρέπει να συμπεριλάβεις ένα μήνυμα με νόημα.

Αυτή η συγκεκριμένη άσκηση απαιτεί να χρησιμοποιήσεις τη δήλωση 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")

Πηγή

WikipediaΟ σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Python Exercism

Έτοιμος να ξεκινήσεις την άσκηση DOT DSL;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.