何の違い?
読みやすさ?はい、違いがあります。最初のものははるかに明確で、あなたの意図をはるかによく表現しています。また、エディターで必要な行数が少なくなるため、それ自体が必ずしも利点とは限りませんが、コードを読みやすくし、編集したい人にとっては一目でわかりやすくなります。
パフォーマンス/「スピード」?いいえ。最適化をオンにしてコンパイラーでこれらの2つのコードスニペットを実行すると、認識できる違いはまったくないという実際のお金を賭けても構わないと思います。そして、最適化が無効になっている場合でも、同じケースに賭けるように私を説得するのにそれほど時間はかかりません。
なんで?C(および私が知っているすべてのC派生言語)では、&&
演算子が短絡評価を実行するため、最初の条件がfalseと評価された場合でも、2番目の条件を評価する必要はありません。なぜなら、ステートメント全体が真実であることが判明する可能性はないからです。
ステートメントのネストは、オペレーターが短絡評価を実行しなかっif
たVB6の古き良き時代の一般的な「最適化」トリックでした。And
読みやすさを向上させない限り、Cコードで使用することを想像できる目的はありません。そして正直なところ、これら2つのコードスニペットをパフォーマンスの点で完全に同等にレンダリングしないコンパイラに遭遇した場合は、そのコンパイラを破棄して使用を停止するときが来ました。これは、太陽の下での最も基本的な最適化であり、コンパイラー作成者にとっては「手に負えない成果」です。彼らがこれを正しく理解できない場合、私はあなたのコードの残りの部分で彼らを信頼しません。
しかし、一般的に、この種のこと(これは間違いなく「マイクロ最適化」のカテゴリーに分類されます)について心配することは、より良いコードを書いたり、より良いプログラマーになるのに役立ちません。Stack Overflowで質問するのに多くの時間を浪費し、週に2〜3の同様の質問に同じ回答を投稿する私のようなユーザーの評判に貢献しているだけです。そして、それはあなたがコードを書き、具体的な方法であなたのスキルを向上させることに費やしていない時間です。