ifステートメント内のロジックを最小限にリファクタリングする

ここに

少し前に、SVG(会社のクローズドソース)を使用して教育用JavaScriptアプリケーションを作成しました最も基本的な形式では、アプリケーションは2つの列(左と右)で構成され、各列にはさまざまな幾何学的形状(正方形、三角形、円など)が含まれていました。

1つの列の各幾何学的形状は、(線を引くことによって)反対側の列の別の幾何学的形状に接続できます。ただし、いずれかの列の形状は、その設定に応じて、その列との間で1つまたは複数の接続を持つことができます。

したがって、の設定を持つシェイプは、{multiple: false}それへの接続または接続からの接続を1つだけ持つことができます。接続がそれから発生したのか、別の形状から発生したのかは関係ありません。1つの接続とは、発信元に関係なく1つの接続のみを意味します。

線を引くことによって形状を接続するコードの部分は、非常に複雑なifステートメントです。ここにあります:

if ((!sourceHasLines && !targetHasLines) ||
  (sourceHasLines && sourceCanMultiply && !targetHasLines) ||
  (sourceHasLines && sourceCanMultiply && targetHasLines && targetCanMultiply) ||
  (!sourceHasLines && !sourceCanMultiply && targetHasLines && targetCanMultiply) || 
  (!sourceHasLines && sourceCanMultiply && targetHasLines && targetCanMultiply)) {
    // Create a line only if one of the above comparisons succeeds
    connection = self.connect($source, $target);
}
  • ソースは1つの列の形状を指し、ターゲットは反対の列の形状を指します。
  • ユーザーは、最初に最初の列の1つの図形をクリックし、次に2番目の列の別の図形をクリックすることで、どちらの列からも接続を開始できます。
  • 同じ列の図形を接続することはできません。

今コードを見ると、ifステートメント内のロジックはおそらく圧縮できると思います。すでにいくつかのアイデアがあります。ただし、これは順列または離散数学などの他のCS関連ロジックのいずれかに関係していると感じています。私はほとんど独学なので、誰かがこれにどのようにアプローチし、上記のifステートメントをリファクタリングするかを確認したいと思います。

コードはうまく機能しますが、どうすれば改善できるのでしょうか。これは、左/右の列の代わりに上/下の行を持つプロトタイプのスクリーンショットです。

上のオブジェクトを下のオブジェクトに接続します

フレル

どうですか:

if ((!SL || SM) && (!TL || TM)) ...

つまり、ソースは空であるか複数行である必要があり、ターゲットは空であるか複数行である必要があります

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ifステートメント内のロジックを最小限にリファクタリングする

分類Dev

これらのifelseステートメントを関数にリファクタリングする方法

分類Dev

ネストされたifステートメントのリファクタリング:最初にブロックが存在するかどうかを確認してから、block.callに別のifステートメントを適用します

分類Dev

条件リファクタリング内のSwitchステートメント

分類Dev

Ifステートメントのリファクタリング

分類Dev

ifelseブロック内で繰り返されるifステートメントのリファクタリング

分類Dev

長いパラメーターリストをJavaのパラメーターオブジェクトにリファクタリングする方法

分類Dev

ケースごとにifステートメントとswitchステートメントを使用せずに、チェーン内の何百もの条件をリファクタリングするにはどうすればよいですか?

分類Dev

switchステートメントをポリモーフィックコードにリファクタリングする

分類Dev

Swift:別のswitchステートメント内のswitchステートメントをリファクタリングします

分類Dev

兄弟クラスのロギングステートメントをリファクタリングする方法は?

分類Dev

Reactでswitchステートメントのコードをリファクタリングする方法は?

分類Dev

Swift iOS:ifステートメントの多くの条件をリファクタリングする方法は?

分類Dev

JUnitテストをリファクタリングして複数のメソッドとテストケースに拡張する

分類Dev

多くのまたはを含むifステートメントをリファクタリングする

分類Dev

フラグメント内のテキストビュー内にハイパーリンクを作成する

分類Dev

コンストラクターのロジックを処理するファクトリクラス?

分類Dev

長いステートメントを再利用可能な関数にリファクタリングする

分類Dev

SQLクエリ内にログステートメントを挿入する

分類Dev

COLOR_ATTACHMENT's-フレームバッファオブジェクト内のカラーアタッチメントとして複数のテクスチャにレンダリングする方法は?

分類Dev

Android: リストフラグメント内のリストビューの外側をクリックする

分類Dev

「with」ステートメントを使用したcaseステートメントのリファクタリング

分類Dev

reactを使用してswitchステートメント内のコードをリファクタリングする方法は?

分類Dev

テキストブロック内の単一の値に基づいてテキストブロックをフィルタリングする

分類Dev

c#nullチェックを使用したswitchステートメントのリファクタリング

分類Dev

BigQueryでのみストリーミングバッファ内のデータをクエリする方法は?

分類Dev

TDDを一連のテストにリファクタリングする

分類Dev

C#ジェネリックス-静的ファクトリメンバーのタイプを推測する

分類Dev

ラージコントローラーメソッドをモデルにリファクタリング

Related 関連記事

  1. 1

    ifステートメント内のロジックを最小限にリファクタリングする

  2. 2

    これらのifelseステートメントを関数にリファクタリングする方法

  3. 3

    ネストされたifステートメントのリファクタリング:最初にブロックが存在するかどうかを確認してから、block.callに別のifステートメントを適用します

  4. 4

    条件リファクタリング内のSwitchステートメント

  5. 5

    Ifステートメントのリファクタリング

  6. 6

    ifelseブロック内で繰り返されるifステートメントのリファクタリング

  7. 7

    長いパラメーターリストをJavaのパラメーターオブジェクトにリファクタリングする方法

  8. 8

    ケースごとにifステートメントとswitchステートメントを使用せずに、チェーン内の何百もの条件をリファクタリングするにはどうすればよいですか?

  9. 9

    switchステートメントをポリモーフィックコードにリファクタリングする

  10. 10

    Swift:別のswitchステートメント内のswitchステートメントをリファクタリングします

  11. 11

    兄弟クラスのロギングステートメントをリファクタリングする方法は?

  12. 12

    Reactでswitchステートメントのコードをリファクタリングする方法は?

  13. 13

    Swift iOS:ifステートメントの多くの条件をリファクタリングする方法は?

  14. 14

    JUnitテストをリファクタリングして複数のメソッドとテストケースに拡張する

  15. 15

    多くのまたはを含むifステートメントをリファクタリングする

  16. 16

    フラグメント内のテキストビュー内にハイパーリンクを作成する

  17. 17

    コンストラクターのロジックを処理するファクトリクラス?

  18. 18

    長いステートメントを再利用可能な関数にリファクタリングする

  19. 19

    SQLクエリ内にログステートメントを挿入する

  20. 20

    COLOR_ATTACHMENT's-フレームバッファオブジェクト内のカラーアタッチメントとして複数のテクスチャにレンダリングする方法は?

  21. 21

    Android: リストフラグメント内のリストビューの外側をクリックする

  22. 22

    「with」ステートメントを使用したcaseステートメントのリファクタリング

  23. 23

    reactを使用してswitchステートメント内のコードをリファクタリングする方法は?

  24. 24

    テキストブロック内の単一の値に基づいてテキストブロックをフィルタリングする

  25. 25

    c#nullチェックを使用したswitchステートメントのリファクタリング

  26. 26

    BigQueryでのみストリーミングバッファ内のデータをクエリする方法は?

  27. 27

    TDDを一連のテストにリファクタリングする

  28. 28

    C#ジェネリックス-静的ファクトリメンバーのタイプを推測する

  29. 29

    ラージコントローラーメソッドをモデルにリファクタリング

ホットタグ

アーカイブ