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では、ビジュアルデザイナを使って画面をデザインすることが可能です。