OOPでのFPのストレッチ

しばらく前、機能的な世界で6か月の休暇を過ごした後、PLOに戻った後、いつものレーキを何度も繰り返しました。誤って状態を変更しました。







private double fBm(Vector2D v, int y) { double result = 0f; double freq = Frequency; for (int i = 0; i < Octaves; ++i) { result += NoiseFn(permutation, v * freq) * Amplitude; freq *= Lacunarity; Amplitude *= Gain; // <--  . } return result; }
      
      





FPでは、特にこのようなバグを取得する必要がありますが、一部の言語では原則として不可能です。 有用な仕事からのサラダとクラスの状態は喜ばれませんでした、この4行でもエラーの範囲は広すぎます。 私はこれらの熊手の面積を減らす方法を考え始めました、そして、私は以下を推測しました:







まず、 this



必須にする必要があります。 式の間違った側にフィールドを置くのは簡単すぎます。 どこにでも文脈を明確に示していたら、すぐに足を踏み入れたことに気づいたでしょう。 残念ながら、C#コンパイラはこれを強制することはできません。また、静的なスタジオチェックでは、逆に機能するルールのみがあります。つまり、これを強制的に削除します。 だから、どうやら、独自に作成する必要があります。







次に、メソッド本体からクラスフィールドの使用を除外し、メソッドの最後にすべての変更を記録する必要があります(存在する場合)。 3つの段落があります。 最初に必要なものすべてを発表し、2番目に有用な作業を行い、3番目に状態を維持します。







 public void DoAThing(int input) { //   int a = this.A; int b = this.B; int result = 0; //   for (int i = 0; i < input; ++i) result += (a + b) * i; //   this.Thing = result; }
      
      





最初の段落では、必要なすべての状態がローカルに保存されます。

2番目では、 this



は表示されません。

3番目では、 this



は常に最初の単語でなければなりません。 状態を変更する他のメソッドはすぐに呼び出されます。







return



はどこにでも追加できますが、メソッドの動作には影響しません。







長所









短所









 { int a = this.A; int b = this.B; return a + b; }
      
      





結論の代わりに







どう思いますか? それは理にかなっていますか、私は心配していますか? すでにこれを行っているか、OOPでAFの他の部分をプルしている場合は、共有してください。








All Articles