矢印は明確な関係を表現し壊れなくする方法
nishio: KJ法などにおける「近くに置く」は、まだ明確になってない「関係」をあいまいに表現する方法で、一方矢印を引く機能は明確になってる関係を表現して、「遠くに動かす」しても消滅しないようにする方法だ。「近くに置く」で表現しただけだと動かしたら壊れてしまう。 nishio: グループ化は「近くに置く」で表現した関係を壊れにくくする方法だ。一塊として移動したり、畳んで一枚のこざねと同じサイズにしたりできる。 nishio: だからやっぱり「矢印機能」は必要なのかもな。ただしそれは多くの人がイメージしてる「二点間をつなぐもの」とは違う。複数のものの間の関係を表現して、明示的に破壊するまで壊れないもの。グループもその一種といえる。 nishio: だけどもじゃあグループの実装をそのまま増やしていいのかというとそうでもない。今のグループの実装はツリーだから、親は一つ。でも矢印は一つの要素が複数の矢印に参加することが自然に発生する。 今のグループはツリーだから囲みが交差することはないが、矢印を始点と終点の囲みとすると交差する
nishio: グループが削除された時、子要素も削除される。グループは子を所持する。 子要素は0/1個のグループを構成する。
矢印や囲みは、子要素を「所持」しない。それが削除された時、子要素を削除しない。子要素が削除されて存在理由がなくなったら消滅する(矢印の端点が削除されたり囲みが空になった場合)
nishio: うん、悪くなさそう。ツリーを構成しているものたちとは基本的な法則やライフサイクルが別物だから、別管理されるのはおかしくない。(最初は矢印のためだけに別管理を導入するのはどうかと思っていた) 中括弧もこれの仲間だな
https://gyazo.com/4cb105f22986d5d12a04f4bc2190b738
nishio: つまりこれは「1つ以上の要素を受け取ってその情報をもとに最前面レイヤーに装飾を発生させる関数」で「要素の管理は要求されない」「要素は消えるかもしれない」だということになるかな。こう割り切ると「矢印の中点に張り付いたこざね」とか「矢印へ引いた矢印」はできなくなる。