不久前,我使用 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)的屏幕截图,其中顶部/底部行而不是左/右列:
最佳答案
怎么样:
if ((!SL || SM) && (!TL || TM)) ...
即:源必须为空或多行,目标必须为空或多行
关于javascript - 将 if 语句内的逻辑重构为最低限度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28261210/