読者です 読者をやめる 読者になる 読者になる

methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

高階関数

http://d.hatena.ne.jp/cubicdaiya/20070507/1178546005

ただ、前にこんなことを書いて、

そもそも、関数を引数にするということは、静的に流れが読めなくなるので、上流工程とか、形式的なプログラム検証からすると、非常に困る。

というふうに、ある人からお叱りを受けたことを考えると、

まず、関数を引数にすること≠静的に動作が予測不可能。
例えば、sort関数に、比較関数を渡すことで任意の順序で並べ替える。これは、完全に予測可能で、検証可能。

じゃぁ何をすると静的な動作の予測が困難になるかというと、callback関数を渡すとか、イベントハンドラをオーバーライドするとか。関数がどんなタイミングで呼ばれるかが外部依存になると、動的な動作を考えながらプログラムを書かないといけなくなる。

え、callbackとか使わずに、switch文使えって?下位層が上位層に依存するの?そんな設計を良いという人とは仕事したくないな。
え、関数呼び出し構造を出力するツールが使えなくなるって?知るかそんなの。