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

C#でcaseステートメントを突き合わせたswitchcaseを使用できます。より正当なケースを壊して読みやすさを低下させるので、ifをあまり混乱させることはできません。砂糖ではなく構文上の塩になります。

于 2012-12-29T14:38:08.567 に答える
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:
    ...
}
于 2012-12-29T14:53:21.003 に答える
0

それが許可された場合、次のような条件をどのように記述しますか。

if( x == a || b )

ここでx、およびaは文字または整数であり、または?bのいずれかです。truefalse

例えば:

x = 'a';
b = true;

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