たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

小さく区切られたブラックボックスを組み合わせて大きいシステムを造る

[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