0

我最近看到了这个问题。其中包含(我相信是)一个非常常见的早期程序员写作错误,if(x==10 || 12)当你的意思是if(x==10 || x==12)这让我想知道。为什么(据我所知)没有对此的支持if(x==10 || 12)看似更自然的语法,或者至少不支持一些类似的语法。所以我的问题是:

1)在任何更常见的语言(c、c++、java、c#)中,这种表达式是否存在某种语法糖/宏扩展/速记。如果不是,为什么不呢?

2)有没有办法使用java和eclipse来添加它(作为编译器宏扩展或任何其他可用的解决方案)?

编辑:澄清,我并不是说我希望改变if(x==10 || 12). 我一直在寻找比它更短if(x==10 || x==12)但在功能上等效的语法糖。

4

4 回答 4

2

if (x == 10 || 12)那是因为完全按照它的书面解释更有意义。那就是“如果 x 等于 10,或者 12 是真的”。如果您想完成某件事,请明确地写出来。

于 2012-12-29T14:50:12.153 回答
1

您可以在支持数组或集合的紧凑表示的语言中使用数组或集合查找。

Javascript(以及 PHP 和 Java)具有数组文字:

if( [10,12].indexOf(x) != -1) ...

您还可以使用按位否定作为以下的快捷方式!=-1

if(~[10,12].indexOf(x)) ...

Php 5.4 也有数组文字,你可以在没有 5.5 的临时变量的情况下使用它们(我认为)。这也应该是超线性的,但是会生成通知,除非您使用@or in_array

if(@[10=>true, 12=>true][$x]) ...

正则表达式查找也是支持紧凑正则表达式语法并且您正在匹配字符串的语言中的一个选项。这样做的好处是可能比数组搜索更快:

if(/^(10|12)$/.test(x)) ...

还建议了一个开关:

switch(x){
  case 10:
  case 12:
    ...
}
于 2012-12-29T14:53:21.003 回答
1

您可以在 C# 中使用带有对接 case 语句的 switch case。你不能过多地使用 ifs,因为你会破坏更多的合法案例并降低可读性。它将是语法盐而不是糖。

于 2012-12-29T14:38:08.567 回答
0

如果允许,您将如何编写这样的条件:

if( x == a || b )

哪里xa是字符或整数,b可以是truefalse

例如:

x = 'a';
b = true;

// later in the program
if( x == 'c' || b )
于 2012-12-29T15:02:41.863 回答