javascript - 将 if 语句内的逻辑重构为最低限度

标签 javascript math logic computer-science permutation

不久前,我使用 SVG 编写了一个教育 JavaScript 应用程序(一家公司的闭源)。在最基本的形式中,该应用程序由两列(左和右)组成,每列包含各种几何形状(正方形、三 Angular 形、圆形等) p>

一列中的每个几何形状都可以连接(通过画线)到相对列中的另一个几何形状。但是,任一列中的形状都可以有一个或多个与它之间的连接,具体取决于其设置。

因此,设置为 {multiple: false} 的形状只能与它或从它建立一个连接。无论这种联系是源自它还是源自另一个形状,这并不重要。一个连接意味着只有一个连接,无论来源如何。

通过画线连接形状的代码部分是一个过于复杂的 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);
}
  • 指一列中的形状,目标指相对列中的形状。
  • 用户可以从任一列启动连接,方法是先点击第一列中的一个形状,然后点击第二列中的另一个形状。
  • 同一列中的形状不能连接。

现在看代码,感觉if语句里面的逻辑大概可以压缩一下,已经有了一些想法。然而,我有一种感觉,这与排列或其他一些与 CS 相关的逻辑(如离散数学)有关。我主要是自学成才,所以我想看看有人会如何处理这个问题并重构上面的 if 语句。

请注意,该代码运行良好,但我想知道如何改进它。下面是一个原型(prototype)的屏幕截图,其中顶部/底部行而不是左/右列:

Connect top objects with bottom objects

最佳答案

怎么样:

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

即:源必须为空或多行,目标必须为空或多行

关于javascript - 将 if 语句内的逻辑重构为最低限度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28261210/

相关文章:

javascript - 在 css/html 中停用 "element.style"?

Java 算术方程字符串 java min(x,y),max(x,y),+,-,/,*

javascript - jQuery 通过按键获取总和总是落后一步

java - JDBC 问题 : not being able to correctly bind variables and values (shortened)

c# - 如何让一个物体精确定位并减速到指定位置停止?

Java - 给定字符串中的所有排列和组合

javascript - 为什么我的正则表达式在这种特殊情况下不起作用

javascript - 使用 XMLHttpRequest 将数组发送到 PHP(纯 JS)

php - 从下拉列表中获取值。 (有点棘手)

c# - 如何在 C# 中表示数学变量?