ドメイン固有言語(DSL)とは、特定の領域に特化した小さな言語です。DSLは対象が絞られているので、_どうやって_ではなく_何を_したいのかを書き手が宣言できるようになり、生産性や理解度に大きな影響を与えることができます。
DSLが活用されている分野の1つに、複雑なカスタマイズや設定があります。
たとえば、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言語に似ています。ただし、DOT言語とは違って、このDSLはこの言語の中だけで使える内部DSLです。
内部DSLと外部DSLの違いについて詳しくは、こちらを参照してください。
この演習では、builder patternを使って、いくつかの構造体を組み立てます。
簡単に言うと、このパターンを使うと、たくさんの引数を持つ構造体の構築関数を、いくつかの独立した関数に分けられます。この方法を使えば、簡潔でありながら柔軟性の高い構造体の構築と設定ができます。
詳しくは、次のページを読んでみてください。