DSL / Literal Collections


DSL

リテラルコレクション

一言要約

Lisp最強 要素を組み合わせるもうひとつの方法は、Literal ListやLiteral Mapを利用することです。

要約

Literal List

//java
state("idle").
  action("unlockDoor").
  action("lockPanel")

のように別々に関数を呼び出す代わりに

//java
state("idle").
  actions("unlockDoor", "lockPanel")

#ruby
state("idle").
  actions(["unlockDoor", "lockPanel"])

のようにリスト形式で記述する。関数呼び出しの引数には可変引数の方が好み。

Literal Map

別名ハッシュまたは辞書。key-valueのペア。

#ruby
state("idle",
  {"doorClosed" => "doorClosed"}
)

:nameはシンボルで、Rubyでは先頭にコロンを付ける。同じ値のシンボルは同じオブジェクトになる。

state :name => "idle", 
      :actions => [:unlockDoor, :lockPanel],
      :transitions => [:doorClosed => :doorClosed]

シンボルがない場合は文字列でも可。

Lispは、Literal Listと関数呼び出しが同じ構文。そもそも、Lispプログラムは全てネストされたリストで表現する。慣れればわかりやすいが、括弧が多すぎてイラつくのが難点。

ファウラーへのフィードバック

担当者のつぶやき

Lisp最強(←しつこい)


みんなの突っ込み