If-statementsを交換します
-
27-09-2019 - |
質問
私はコードの最小化と強化に取り組んでいます。私の質問は、コードのロジックを破壊せずに上記のステートメントを交換することは可能ですか?
int c1 = Integer.parseInt(args[0]) ;
int c2 = Integer.parseInt(args[1]) ;
int c3 = Integer.parseInt(args[2]) ;
if (c2-c1==0)
if ( c1 != c3 )
両方が変数を書く操作がない場合、両方の間にあるので、私はイエスと言うでしょうが、私は確信がありません。
何か案は?
解決
なぜあなたが望んでいるのか本当にわかりません (c2 - c1 == 0)
それ以外の c1 == c2
行ってみませんか
if ((c1 == c2) && (c1 != c3)){
do_stuff();
}
また
if ((c1 != c3) && (c1 == c2)){
do_stuff();
}
ルート
メモとして、C2のC1をどこにでも切り替えることにペナルティや利点はありません。上記のうち、最初の条件を最初に失敗させる可能性が最も高いことはわずかに効率的です。これは、最初の条件が故障した場合に2番目の条件が評価されないためです。
また、これはミクロの最適化であり、速度を考慮してはいけません。
第三に、プログラムが他に何もしない場合、この条件が保持されない場合に終了し、あなたが本当に微小最適化したい(あなたはそうしない)私はあなたが彼らが知っている前に議論を解析しないことをお勧めします必要です。ほとんどの場合、C1がC2に不平等になる場合、C3を解析することで待機することができます。これは厳密に理論です。それはあなたのコードをそれほど読みにくくするので、実際にこれを行わないでください。できるだけ早くすべてのコマンドラインVARを賢明なものに処理することははるかに明確です。
他のヒント
int c1 = Integer.parseInt(args[0]) ;
int c2 = Integer.parseInt(args[1]) ;
int c3 = Integer.parseInt(args[2]) ;
if (c2 == c1 && c1 != c3 ) {
...
}
はい。書くこともできます if ((c2-c1==0) && (c1 != c3))
.
あなたが意味するなら
if ((c1 != c3) && (c2-c1==0))
そして、あなたは特別なことをするつもりはありません c2-c1==0
それからはい。
他に関係するブロックがない場合は、次のように書くことをお勧めします。
if (c2-c1==0 && c1 != c3 )
または、それらを交換したい場合は、
if (c1 != c3 && c2-c1==0)