第9章


データ組織


9.1分割変数


2つ以上のキャラクターの変数があれば、破るべきです.各ロールには変数があります.

プログラム

  • 変数を宣言した場所と、最初に値を入力した場所で変数名を変更します.
  • 可能であれば、この時点で変更を宣言します.
  • は、変数の2番目の付与点より前のすべての参照(変数が書き込まれた位置)を、新しい変数名
  • に置き換える.
  • 第2次大学入試の変数が原名で再発表された.
  • テスト
  • .
  • を繰り返します.各繰り返しで、変数を新しい名前として宣言し、次の置換前のすべての参照を新しい変数名に変更します.この過程は最後の大学入学まで繰り返された.
  • function distanceTravelled(scenario, time) {
      let result;
      let acc = scenario.primaryForce / scenario.mass; // ⬅️
      let primaryTime = Math.min(time, scenario.delay);
      result = 0.5 * acc * primaryTime * primaryTime;
      let secondaryTime = time - scenario.delay;
      if (secondaryTime > 0) {
    		let primaryVelocity = acc * scenario.delay;
        acc = (scenario.primaryForce + scenario.secondaryForce) / scenario.mass; // ⬅️
        result += primaryVelocity * secondaryTime + 0.5 * acc * secondaryTime * secondaryTime;
      }
      return result;
    }
    値をacc変数の2回の部分に分けて代入します.
    function distanceTravelled(scenario, time) {
      let result;
      const primaryAcceleration = scenario.primaryForce / scenario.mass; // ✅
      let primaryTime = Math.min(time, scenario.delay);
      result = 0.5 * primaryAcceleration * primaryTime * primaryTime; // ✅
      let secondaryTime = time - scenario.delay;
      if (secondaryTime > 0) {
        let primaryVelocity = primaryAcceleration * scenario.delay; // ✅
        const secondaryAcceleration = (scenario.primaryForce + scenario.secondaryForce) / scenario.mass; // ✅
        result += primaryVelocity * secondaryTime + 0.5 * secondaryAcceleration * secondaryTime * secondaryTime; // ✅
      }
      return result;
    }

    9.2フィールド名の変更


    データ構造はプログラムの理解に大きな役割を果たす.クラスでは、ゲイトメソッドとセイトメソッドの名前は、レコード構造体のフィールド名と同様に重要です.

    プログラム

  • レコードの有効範囲が限られている場合、すべてのアクセスフィールドのコードを変更し、テストします.後続の手順は必要ありません.
  • レコードがカプセル化されていない場合は、まずそれをカプセル化する.
  • カプセル化オブジェクトのプライベートフィールド名を変更し、それに応じて内部メソッドを変更します.
  • テスト
  • .
  • 生成者のパラメータにフィールドと名前が重複している場合は、変更関数宣言に変更されます.
  • 9.3派生変数をクエリー関数に変換


    可変データの有効範囲はできるだけ縮小しなければならない.
    いずれかの方法で、計算しやすいすべての変数を除去します.ただし、新しいデータ構造を生成する変換演算の場合は、それを保持することが望ましい例外があります.
  • データ構造を含むオブジェクト
  • は、データベースの計算結果を属性として提供する.
    関数
  • は、
  • のデータ構造を受け入れ、それを別のデータ構造に変換して返す

    プログラム

  • 変数値を更新したすべての場所を探します.必要に応じて、変数分裂を利用して、更新点ごとに変数を分離します.
  • 変数値を計算する関数を作成します.
  • 変数を使用するすべての場所にアシスタントを追加し、関数の計算結果が変数の値と同じであることを確認します.
  • テスト
  • .
  • 変数を読み出すすべてのコードは、関数呼び出しで置き換えられます.
  • テスト
  • .
  • 変数の高更新コードがキャンセルされると発表した.
  • 9.4参照を値に置換


    オブジェクト(データ構造)が他のオブジェクト(データ構造)にネストされている場合は、内部オブジェクトを参照または値と見なすことができます.リファレンスを使用する場合は、内部オブジェクトは保持され、そのプロパティのみが更新されます.値を使用する場合は、既存の内部オブジェクトを新しいプロパティを含むオブジェクトで置き換えます.
    フィールドを値として扱う場合は、内部オブジェクトのクラスを値オブジェクトとして変更できます.値オブジェクトは不変なので、基本的には自由に使用できます.
    特定

    9.5値を参照に置換


    9.6 magic literalの置換


    reference

  • https://zigsong.github.io/2022/04/14/refactoring-9/