【发布时间】:2021-12-11 17:42:02
【问题描述】:
我有一个使用 if-else if-else 块的代码 sn-p。例如,我想知道在不改变逻辑的情况下缩短冗长的条件语句else if (cardLength == 16) && (numberArray[0] == 5 && (numberArray[1] == 1 || numberArray[1] == 2 || numberArray[1] == 3 || numberArray[1] == 4 || numberArray[1] == 5)) 的任何潜在方法。在python中,我可以这样做:if (cardLength == 16) and (numberArray[0:2] in range(51,56))。我可以在 C 中为此目的使用任何特定的语法糖吗?
if (cardLength == 15) &&
(numberArray[0] == 3 && (numberArray[1] == 4 || numberArray[1] == 7))
{
printf("AMEX\n");
}
else if (cardLength == 16) &&
(numberArray[0] == 5 && (numberArray[1] == 1 || numberArray[1] == 2 || numberArray[1] == 3 || numberArray[1] == 4 || numberArray[1] == 5))
{
printf("MASTERCARD\n");
}
else if (cardLength == 13) && (numberArray[0] == 4)
{
printf("VISA\n");
}
else
{
printf("INVALID\n");
}
【问题讨论】:
-
而不是
numberArray[1] == 1 || numberArray[1] == 2 || numberArray[1] == 3 || numberArray[1] == 4 || numberArray[1] == 5或者numberArray[1] >= 1 && numberArray[1] <= 5? -
另一方面,拥有更“紧凑”的代码并不总是可取的,因为这通常会使代码更难阅读、理解和维护。编译器也很聪明,所以通常更“紧凑”的代码并不一定意味着在编译器优化后代码更有效。
-
我不认为你可以在不改变“技术”的情况下有意义地压缩代码。 IE。您可以进行一些类似正则表达式的验证或构建模式匹配的 DSL,但您所拥有的效果很好并且非常少
-
我的 Visa 卡有 16 位数字。你确定这是对的吗?
-
if语句中缺少括号,导致代码无法编译。