DSL
リテラルマップ †
一言要約 †
リテラルマップは関数のキーワード付き引数として使用される。キー検証の問題があるが、1回以上現れるべきでない引数を表現するのに適している。
要約 †
仕組み †
- リテラルマップはmapを引数とする関数の中で、キーワード付き引数として使われる。
- コードの書き手に正しいキーを強制する手段がない。
- リテラルマップのキーはシンボルが使われることが多い。
- キーを記述するショートカット用意されている言語もある
- Ruby ver1.9以降では{:cores => 2}を{cores: 2}と書ける
- リテラルマップの代わりにリテラルリストだけで書くこともできる。
- lispでの書き方。他は余り見たことがない。
- ex. (processor (cores 2) (type i386))
いつ使用するか? †
- リテラルマップは多くとも1度しか出現しない場合の引数として最適な構文である。
- リテラルマップがなければ、ネステッド関数やメソッドチェーン、リテラルリストで代替も可能。
例:リストとマップを使用したコンピュータ構成(Ruby) †
- リテラルマップだけ使うのではなく、他の技術(ネステッド関数やリテラルリスト等)中でリテラルマップが適した箇所に使用する
- 不正なキーを取り込まないようにキーの検証をする
例:Greenspun形式(Ruby)への進化 †
- 前の例はリテラルリストとリテラルマップだけで内部DSLを記述することができる
- さらにリテラルリストだけで書くこともできる。
- でも、余り良い書き方にはならない。けれども本質的にlispの書き方と同じになる
ファウラーへのフィードバック †
担当者のつぶやき †
- リテラルマップのトピックなのに、本文もサンプルもlispに言及しているのは何か意味がある?ファウラーがlisp好き?
- "In many ways the DSL script is like an external DSL encoded in internal literal collection syntax instead of a string."の一文が良く分かりませんでした。訳はとりあえず『さまざまな点で、DSLスクリプトは文字列の代わりに内部的なリテラルコレクション構文でエンコードされた外部DSLのようなものです。』としました。
みんなの突っ込み †
- それはないと思う。 > ファウラーがlisp好き -- kakuda?