ユーザーが繰り返す質問のリストがあります。どの質問からでも開始できますが、順序はあります。そのため、配列へのインデックスを維持し、次のようにインクリメントします。
CurrentQuestion = (++CurrentQuestion < questions.Length) ? CurrentQuestion : 0;
ここで何が起こっているのかは必ずしも明らかではありませんが、これを行うためのよりエレガントな方法はありますか?
ユーザーが繰り返す質問のリストがあります。どの質問からでも開始できますが、順序はあります。そのため、配列へのインデックスを維持し、次のようにインクリメントします。
CurrentQuestion = (++CurrentQuestion < questions.Length) ? CurrentQuestion : 0;
ここで何が起こっているのかは必ずしも明らかではありませんが、これを行うためのよりエレガントな方法はありますか?
++
私は、変数を使用してから、同じステートメントでその変数を再度使用することに強い嫌悪感を抱いています。この行は C# では正常に機能すると思いますが、このような行は C/C++ では定義されていないため、フラグが立てられます。を好む
CurrentQuestion = (CurrentQuestion+1) % questions.Length;
これは、C に似た言語で時計演算を行う慣用的な方法だと思います。
ここで何が起こっているのかは必ずしも明らかではありませんが、これを行うためのよりエレガントな方法はありますか?
一部の人にはすぐにはわかりませんが、私はそれが何をしているのかを正確に知っています。
ただし、考慮したいのは、賢いことよりも読みやすいコードを書くことの方が重要だということです。コードを維持する必要があり、コンパイラより賢くはありません。
このようにコードを書いて、満足してください。
//ensure that the CurrentQuestion counter increments and loops back around after hitting "list max"
CurrentQuestion = CurrentQuestion + 1;
if (CurrentQuestion >= questions.Length) {
CurrentQuestion = 0;
} // meta-comment: use braces incase you have to add more later
重要な点は、このコードが読み取り可能になり、まだ最適化されていることです。これは他のコードとまったく同じように機能し、コードを何度も読み直さなくても後でパーツを変更できます。
ここで使用したセマンティクスにも注意してください。
CurrentQuestion = CurrentQuestion + 1;
代わりに実行してください。最初の方が意図がはるかに明確だからです。常に意図的なコードを書いてください。CurrentQuestion += 1;
CurrentQuestion++;
++CurrentQuestion;
条件演算子は必要ありません
CurrentQuestion = ++CurrentQuestion % questions.Length;
でもどちらを好むかは何よりもスタイルの問題だと思います