[caller/callee・ブラックボックス・interface]
小さなブラックボックスを組み合わせて大きいシステムを造る
calleeが内部でcallerを操作するな、calleeは変数を返すだけにしろ(まさに関数型)
[ブラックボックス: 暗示的外部操作をしない]
暗示的に外部を操作した場合、エラー解析のためブラックボックスを開く必要がある
外部にある何を、どんな条件で、どのように変更するか開けないと (明示されていないために)わからないから
あけたらそれ、ブラックボックスちゃうやん
[引数によらない状態変化がもたらすデメリット]
いつ変わるか調べるの大変 (怠惰に反する)
X = "new"とかx.y = "new"とかf(X)とか書いてあったら、"x = || (x)"で検索かけられなくもない
関数のほう死ぬほどいやだけど
明示してあれば、引数によらんでも一緒か。関数理解は大前提だし
y = x, f(y)されたら引数型でも同じくらい手間がかかる
[ブラックボックス間の協調]
変数変換
イベント
型不明オブジェクトを外部から受け入れる (引数、暗示的依存とわず) 場合、
・オブジェクトがどうなっているか
・property Xを持つか
・処理中に外部から変更されるリスクはあるか
を考慮すべきである。すなわち外部を全て理解し考慮しないといけなくなる (つらい)
-> 外部interfaceの明示
[必要条件と十分条件を誤解させる言い方はさけよう]
calleeは何をするか
なんか呼ばれたので処理して返すよ
実装:
- function call & return
- event come & event emit
- change detection by other program?
- interface function call