纏まりのあるデータは1つの引数や入力欄として統合的に扱う (Scratchpad)
This page is a personal scratchpad.
ProcessingのAPI、circle(x, y, d) か circle([x, y], d) でいうと後者の方が好み
なぜなら circle(vec2.add(a, b), d) が出来るから
p5.jsの方なら circle(...vec2.add(a, b), d)でも良いのだけど、いかんせんp5.Vectorは{x: number, y: number, z?: number}なので、spread syntaxが使えない
これって別にp5に限った話でなく「意味としてまとまりのあるデータ型は1つの引数や入力欄として統合的に扱えたほうが良い」と思っている レイヤートランスフォームは mat2d で纏め、そのデフォ式を次のようにするなど。
(mat2d/*
(mat2d/translate [0 0])
(mat2d/rotate 0)
(mat2d/scale [1 1]))
この記法があれば、トランスフォーム値を乗算するためだけにヌルレイヤーを用意する必要がなくなるし、別個に分かれたtx, ty, tzそれぞれに似たようなエクスプレッションを設定する必要も無くなる

ここで大事なのは、「デフォルト値」ではなく「デフォルト式」であること。値のデフォは[1 0 0 1 0 0]の単位行列だけど、それが6つの独立したスライダーとして表示されても使い勝手が悪い。となると、式が返す値ではなく、式というシニフィアンそのものを文法の中で(quote式により)指し示すことの出来るLispが、こうした機能の記述には適している。
mat2d:
(=> [...^{...(Vector Mat2d)
default: `[(mat2d/translate [0 0])
(mat2d/rotate 0)
(mat2d/scale [1 1])]}
ms] (body-of-function))