8 DSLとしてのCurl
DSLは「ドメイン固有言語」の略で、特定の用途のために使われる言語です。GUIの画面構成や設定の記述など、専用の言語や構文を作ることが多かったのですが、「まるでその構成を記述するための言語であるかのように使える」というのを「ある言語をDSLとして使う」と言います。
先ほど、ボタンを配置するサンプルを実行しました。ボタンを表示する部分を、もう少し複雑にして次のようにしてみましょう。
{VBox halign="center", spacing=3pt,
{TextField width=5cm},
{HBox spacing=5pt,
{CommandButton
label="こんにちは"
},
{CommandButton
label="こんばんは"
}
}
}
これを実行すると、以下のようにコンポーネントが配置されます。

VBoxはコンポーネントを縦に並べるためのもので、HBoxはコンポーネントを横に並べるためのものだと思ってください。そうすると、幅5cmのTextFieldとHBoxを縦にならべ、そのHBoxの中に「こんにちは」ボタンと「こんばんは」ボタンを横にならべる、という構造になっていることが分かります。これは、Curl言語の標準的な文法を使って実現されていますが、GUIを構築するための言語で記述されているかのように見えます。
このように、CurlはDSLとして使えるような構文になっています。Javaで記述しようとすれば、おそらく次のような手続きとしてのコードになるでしょう。
VBox v = new VBox();
v.setHalign("center");
v.setSpacing(3);
TextField t = new TextField();
t.setWidth(5);
v.add(t);
HBox h = new HBox();
h.setSpacing(5);
h.add(new CommandButton("こんにちは");
h.add(new CommandButton("こんばんは");
v.add(h);
もちろんJavaでも、次のように書けるようライブラリを設計することで、DSLに近づけることはできますが、やはり少し無理があります。
new VBox(
new TextField().
setWidth(5),
new HBox(
new CommandButton().
setLabel("こんにちは"),
new CommandButton().
setLabel("こんばんは")
).setSpacing(5)
).setHalign("center")
.setSpacing(3);
細かいところで、値を指定するときに「cm」や「pt」などの単位を指定できるのも、Curlの面白いところです。さらにCurlでは、ビジュアルデザイナを使って画面をデザインすることが可能です。


