私は C++ 講師の講義ノートを読んでいるのですが、次のように書いてありました。
- インデントを使用する // OK
- 演算子の優先順位に頼らず、常に括弧を使用してください // OK
- 常に { } ブロックを使用します - たとえ 1 行であっても // はOK ではありません、なぜですか ?
- 比較の左側に Const オブジェクト // OK
- 0 以上の変数には unsigned を使用する // 便利なトリック
- 削除後にポインタを NULL に設定する - 二重削除保護 // 悪くない
3 番目のテクニックは私にはよく分かりません。 に 1 行配置することで何が得られるのでしょうか{ ... }
?
たとえば、次の奇妙なコードを見てみましょう。
int j = 0;
for (int i = 0 ; i < 100 ; ++i)
{
if (i % 2 == 0)
{
j++;
}
}
これを次のように置き換えます:
int j = 0;
for (int i = 0 ; i < 100 ; ++i)
if (i % 2 == 0)
j++;
1 番目のバージョンを使用する利点は何ですか?
ベストアンサー1
i
を増分するときにも変更してみましょうj
:
int j = 0;
for (int i = 0 ; i < 100 ; ++i)
if (i % 2 == 0)
j++;
i++;
ああ、大変! Python から来たので、これは問題ないように見えますが、実際にはそうではありません。これは次のコードと同等です。
int j = 0;
for (int i = 0 ; i < 100 ; ++i)
if (i % 2 == 0)
j++;
i++;
もちろん、これは愚かな間違いですが、経験豊富なプログラマーでも犯す可能性のある間違いです。
もう一つの非常に良い理由は、ta.speot.is の回答。
3 番目に思いつくのは、ネストされた ですif
。
if (cond1)
if (cond2)
doSomething();
ここで、条件が満たされていないdoSomethingElse()
場合(新機能)を実行したいとします。つまり、次のようになります。cond1
if (cond1)
if (cond2)
doSomething();
else
doSomethingElse();
これは明らかに間違っています。なぜなら はelse
内部の と関連付けられるからですif
。
編集: 注目を集めているので、私の見解を明確にしておきます。私が答えていた質問は次のとおりです。
1 番目のバージョンを使用する利点は何ですか?
すでに述べたとおりです。メリットはいくつかあります。しかし、私の意見では、「常に」というルールが常に適用されるわけではありません。そのため、私は全面的に支持しません。
常に { } ブロックを使用します - たとえ 1 行であっても // は OK ではありません。なぜでしょうか ?
常にブロックを使用するべきだと言っているのではありませ{}
ん。条件と動作が十分に単純な場合は、使用しないでください。後から誰かが来て、機能を追加するためにコードを変更する可能性があると思われる場合は、使用してください。