嫌われプログラミングの代弁者

「何で頭ごなしに嫌う人間が居るのか」を色々考える

何指向でもダメな時はダメ 2

何指向でもダメな理由

  • オブジェクトや純粋関数は、値を多めに取るから意味がぼやける
  • 非純粋関数や手続き(プログラムの一部分、関数も含む)は、値を少なめに取り、副作用で補うから意味がぼやける
  • 非関数の手続き(文の羅列)は、すべて副作用で賄うから、形式的に意味が取れない
  • 関数型は、それを実行する環境で使えるすべての値を自分での定義無しに使うから、隠れ副作用の原因となり、意味がぼやける
  • 意味を十全に問うには、原因ー結果という、プログラミングに「覆い被さる」別の尺度が必要

だから、何指向プログラミングでもダメな時はダメ

である可能性が有ります。

 

 

何指向でもダメな別の理由

同じ原因を持つ結果(プログラムの最小単位である、手続き)が複数有る場合、

  • 責務の面からは単一に見える(同じ原因なので、責務的には区別がつかない)が、
  • プログラミングでは、後勝ちとなる事が典型的で、
  • 複数有る結果(手続き)に、優勝劣敗が生じる

事も、どんなプログラミング"指向"でも、検知出来ないと思います。

関数型プログラミングで好んで例示される、ごく単純なプログラム一式を超えた規模のプログラミングの場合、原因ー結果の分析の併用が必須となる*1と思います。

また、後勝ちは、変数を不変にしても、別の変数を使えば済むだけで、対処案となり得ないと思います。

 

オブジェクト指向

オブジェクト指向の(表題の)単位である、「オブジェクト」は、値を非常に多めに取っていると思いますし、
それらのどれを使っても、副作用とはしません。

それをずるいと見ても不思議は有りません。

 

また、その性質上、他のオブジェクトとの性格分けが、「星座」の様に、

  • 近しい位置に有る、というだけの分類

になりがちで、これも意味がぼやける原因だと思います。

 

純粋関数

純粋関数は、

  • 値が少なめ

という事が不可能で、値を多めに取る事が必須に近く、

  • 型での分類が事実上不可能

です。

 

 

非純粋関数や手続き

非純粋関数は、値を少なく取り、意味を際立たせる事が可能ですが、必然的に副作用に頼る事になります。

そこに意味の抜けが生じます。

 

 

共変性と反変性

共変性と反変性が必要不可欠となる、継承や引数割り当ても、

  • 値の多め、少なめ

が生じる原因の1つで、これを考慮しても、

  • 値の多め、少なめ

は、避けられない事だと思います。

 

 

結論

これからも「何指向でもダメな時はダメ」で、原因ー結果の分析の併用が必須という超絶当たり前の事が、どこにも記事として公開されていない事でプログラミングが嫌いになる人は存在し続ける事でしょう。

*1:「メールを出す」という原因の、副原因で有る「Envelope Fromを設定する」に対する結果となる手続きが、どことどこに存在するかを銘記する、など。