if(x == 10 || x == 12)的句法糖,为什么不呢?

时间:2012-12-29 14:35:10

标签: if-statement

我最近看到了this个问题。其中包含(我相信的)一个非常常见的早期程序员编写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 个答案:

答案 0 :(得分:2)

那是因为if (x == 10 || 12)的解释与编写完全一致更有意义。这是“如果x等于10,或12是真的”。如果你想完成某些事情,请明确写下来。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

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

您还可以使用按位取反作为!=-1的快捷方式:

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

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

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

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

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

还建议使用开关:

switch(x){
  case 10:
  case 12:
    ...
}

答案 3 :(得分:0)

如果允许,你会怎么写这样的条件:

if( x == a || b )

其中xa是字符还是整数,b可以是true还是false

例如:

x = 'a';
b = true;

// later in the program
if( x == 'c' || b )