「関数の理想的な引数の数はゼロです」は明らかに間違っています。引数の理想的な数は、関数に副作用がないようにするために必要な数です。それよりも少ないと、機能が不必要に不必要になり、成功の穴から離れて痛みの勾配を登らざるを得なくなります。時々、「ボブおじさん」が彼のアドバイスにスポットを当てています。時々彼は見事に間違っています。彼のゼロ引数アドバイスは後者の例です
(ソース:このサイトの別の質問の下での@David Arnoによるコメント)
コメントには133の賛成票があります。そのため、そのメリットにもっと注意を払いたいと思います。
私が知っている限りでは、プログラミングには2つの別々の方法があります:純粋な関数型プログラミング(このコメントが奨励するもの)と伝える、尋ねない(このWebサイトでも時々推奨されています)。私の知る限り、これらの2つの原則は基本的に互換性がなく、互いに反対に近いものです。副作用しかありません」。また、純粋なファンシトンが機能的パラダイムのコアと考えられているのに、聞かないで、OOパラダイムのコアと考えられていると思ったので、私はちょっと困惑しています。
開発者はおそらくこれらのパラダイムのいずれかを選択し、それに固執すべきでしょうか?まあ、私は自分を決して従わせることができなかったことを認めなければなりません。多くの場合、値を返すのが便利だと思われ、副作用でのみ達成したいことをどのように達成できるか本当にわかりません。多くの場合、副作用があると便利に思えますが、値を返すだけで達成したいことをどのように達成できるか本当にわかりません。また、しばしば(これは恐ろしいことだと思います)両方を行うメソッドがあります。
しかし、これらの133の賛成票から、私は現在純粋な関数型プログラミングが「勝っている」と推論しています。これは正しいです?
したがって、このアンチパターンに乗ったゲームの例で私が作ろうとしているのは、純粋に機能的なパラダイムに準拠させるためにそれを実現したい場合、どうすればいいのでしょうか?!
戦闘状態にあることは私にとって理にかなっているようです。これはターンベースのゲームであるため、私は辞書に戦闘状態を保持します(マルチプレイヤー-同時に多くのプレイヤーがプレイする多くの戦闘があるかもしれません)。プレーヤーが順番を回すたびに、(a)状態を適宜変更し、(b)更新をプレーヤーに返します。これは、JSONにシリアル化され、基本的に、ボード。これは、両方の原則に同時に違反していると思われます。
OK-本当にやりたいなら、メソッドをその場で修正するのではなく、戦闘状態に戻すことができます。だが!それから、完全に新しい状態を変更するのではなく、単に戻すために、戦闘状態のすべてを不必要にコピーする必要がありますか?
おそらく、移動が攻撃である場合、HPが更新されたキャラクターを返すことができますか?問題は、それほど単純ではないことです。ゲームのルール、動きは、プレイヤーのHPの一部を削除するだけでなく、多くの場合、より多くの効果をもたらします。たとえば、キャラクター間の距離を広げたり、特殊効果を適用したりすることができます。
私はその場で状態を変更して更新を返す方がはるかに簡単に思えます...
しかし、経験豊富なエンジニアはこれにどのように取り組むでしょうか?