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

If statement if(x==10 | | x==12)的语法糖,为什么不呢?,if-statement,If Statement,我最近看到了一个问题。其中包含(我相信是)一个非常常见的早期编程错误,即编写if(x==10 | | | 12),而你的意思是if(x==10 | | x==12),这让我感到奇怪。为什么(据我所知)如果(x==10 | | 12)看起来更自然的语法,或者至少是一些类似的语法,就不支持这个。因此,我的问题是: P>1)在任何一种较常见的语言(C、C++、爪哇、C)中,都存在某种句法糖/宏观扩展/速记。若否,原因为何 2) 有没有一种方法可以使用java和eclipse来添加它(作为编译器宏扩展或

我最近看到了一个问题。其中包含(我相信是)一个非常常见的早期编程错误,即编写
if(x==10 | | | 12)
,而你的意思是
if(x==10 | | x==12)
,这让我感到奇怪。为什么(据我所知)如果(x==10 | | 12)看起来更自然的语法,或者至少是一些类似的语法,就不支持这个
。因此,我的问题是:

P>1)在任何一种较常见的语言(C、C++、爪哇、C)中,都存在某种句法糖/宏观扩展/速记。若否,原因为何

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


编辑:澄清,我的意思并不是说如果(x==10 | | 12)
,我想改变
的含义。我在寻找比if(x==10 | | x==12)
短的语法糖,但在功能上是等效的。

你可以使用一个在C中有对接大小写语句的开关大小写。你不能把ifs搞得太乱,因为这样会破坏更多合法案例,降低可读性。它将是语法上的盐而不是糖。

您可以使用一个switch case,在C#中使用对接的case语句。你不能把ifs搞得太乱,因为这样会破坏更多合法案例,降低可读性。如果(x==10 | | 12)被准确地解释为它所写的话,
就更有意义了。这就是“如果x等于10,或者12是真的”。如果你想完成某件事,就要明确地写出来。

这是因为如果(x==10 | 12)
被准确地解释为它所写的内容,那么
If(x==10 | 12)
就更有意义了。这就是“如果x等于10,或者12是真的”。如果您想完成某项工作,请显式编写。

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

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

if( [10,12].indexOf(x) != -1) ...
您还可以使用位求反作为
的快捷方式=-1

if(~[10,12].indexOf(x)) ...
PHP5.4也有数组文本,您可以在不使用5.5中的临时变量的情况下使用它们(我认为)。这也应该是超线性的,但除非在数组中使用
@
,否则会生成通知:

if(@[10=>true, 12=>true][$x]) ...
正则表达式查找也是支持紧凑正则表达式语法的语言中的一个选项,您可以匹配字符串。这样做的好处是可能比数组搜索更快:

if(/^(10|12)$/.test(x)) ...
还建议采用一种开关:

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

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

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

if( [10,12].indexOf(x) != -1) ...
您还可以使用位求反作为
的快捷方式=-1

if(~[10,12].indexOf(x)) ...
PHP5.4也有数组文本,您可以在不使用5.5中的临时变量的情况下使用它们(我认为)。这也应该是超线性的,但除非在数组中使用
@
,否则会生成通知:

if(@[10=>true, 12=>true][$x]) ...
正则表达式查找也是支持紧凑正则表达式语法的语言中的一个选项,您可以匹配字符串。这样做的好处是可能比数组搜索更快:

if(/^(10|12)$/.test(x)) ...
还建议采用一种开关:

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

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

if( x == a || b )
其中
x
a
是字符或整数,
b
可以是
true
false

例如:

x = 'a';
b = true;

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

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

if( x == a || b )
其中
x
a
是字符或整数,
b
可以是
true
false

例如:

x = 'a';
b = true;

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

Python有一个类似的实际操作符:
如果在(10,12)中有x:…
在Javascript中:
~[10,12].indexOf(x)
;瓷砖是
的快捷方式=-1
PHP:
in_array($x,[10,12])
@JanDvorak你不应该抵制PHP更新。if(x==10 | | | 12)
基本上会被翻译成
if((x==10)| |(!!(12)==true))
(!!(x)=true)
适用于
x>0
。Python有一个类似的实际运算符:
如果x在(10,12)中:…
在Javascript中:
~[10,12]。indexOf(x)
;瓷砖是
的快捷方式=-1
PHP:
in_array($x,[10,12])
@JanDvorak你不应该抵制PHP更新。if(x==10 | | | 12)
基本上会被翻译成
if((x==10)| |(!!(12)==true))
<代码>(!!(x)=true)适用于
x>0