私はこのようなコードを見てきました:
if(statement)
do this;
else
do this;
しかし、これはもっと読みやすいと思います:
if(statement){
do this;
}else{
do this;
}
両方の方法が機能するので、これは単にどちらを使用するかという好みの問題ですか、それとも他の方法よりも推奨されますか?
私はこのようなコードを見てきました:
if(statement)
do this;
else
do this;
しかし、これはもっと読みやすいと思います:
if(statement){
do this;
}else{
do this;
}
両方の方法が機能するので、これは単にどちらを使用するかという好みの問題ですか、それとも他の方法よりも推奨されますか?
回答:
最初のバージョンの問題は、中かっこを追加することを忘れずに戻ってifまたはelse句に2番目のステートメントを追加すると、コードが予期せずおかしい方法で壊れることです。
保守性に関しては、2番目の形式を使用する方が常に賢明です。
編集:ネッドはコメントでこれを指摘していますが、ここにもリンクする価値があると思います。これは単なる象牙の塔の架空のでたらめではありません:https : //www.imperialviolet.org/2014/02/22/applebug.html
if (…) { goto L; goto L; }
、中括弧を忘れました。「もし(…){goto L; Lに移動します。} `はまだバグであるため(セキュリティに影響を与えるものではないため)、セキュリティバグではありません。別の例では、物事が反対方向に進み、ブレースレスコードが誤って安全になる可能性があります。3番目の例では、ブレースレスコードには最初はバグがなく、開発者はブレースを追加するときにタイプミスを導入します。
ステートメントブロックを除外する際の1つの問題は、else-ambiguityです。つまり、Cに触発された言語はインデントを無視するため、これを分離する方法はありません。
if(one)
if(two)
foo();
else
bar();
これから:
if(one)
if(two)
foo();
else
bar();
else
バインドは、最も内側の最も内側に貪欲にバインドしif
ます。これを知らない、それについて考えていない、またはまだ十分なコーヒーを持っていない人々によってCまたは類似の言語がコーディングされている場合に問題が発生します。したがって、彼らは1つのことをすると思うコードを記述しますが、言語仕様によると、パーサーは別のことを行う必要がありますが、これは非常に異なる場合があります。そしてはい、それは文法がそれらを理論的に「不必要」としてフラグを立てたとしても、常に中括弧を含めることを支持する別の堅実な議論です。
私の一般的なパターンは、1行に収まる場合は次のようにします。
if(true) do_something();
else句がある場合、または実行したいコードtrue
が非常に長い場合は、中括弧で囲みます。
if(true) {
do_something_and_pass_arguments_to_it(argument1, argument2, argument3);
}
if(false) {
do_something();
} else {
do_something_else();
}
最終的には、スタイルと読みやすさの主観的な問題に帰着します。ただし、一般的なプログラミングの世界は、2つの部分(中かっこを使用する言語の場合)にかなり分かれています。例外なしで常に使用するか、例外付きで使用するかです。私は後者のグループの一員です。
if(true){ do_something(); }
、なぜ別のプログラマーが深刻なバグを導入する可能性があるのか(Appleの「goto fail」の合計sslコードのねじ込みを調べてください)。
使用しているIDEのコードフォーマッタを使用しています。それは異なる場合がありますが、設定/オプションで設定できます。
私はこれが好きです:
if (statement)
{
// comment to denote in words the case
do this;
// keep this block simple, if more than 10-15 lines needed, I add a function for it
}
else
{
do this;
}
私が従う「ルール」はこれです:
「if」ステートメントが何かを行うためにテストしている場合(IE呼び出し関数、変数の構成など)、中かっこを使用します。
if($test)
{
doSomething();
}
これは、どのような状況で、どの関数が呼び出され、プログラムのフローがどこに向かっているのかを明確にする必要があると感じているからです。どのような関数が呼び出され、どのような変数がこの条件に設定されているかをプログラマーに正確に理解させることは、プログラムが何をしているのかを正確に理解させるために重要です。
「if」ステートメントが何かを停止するためにテストしている場合(ループまたは関数内のIEフロー制御)、1行を使用します。
if($test) continue;
if($test) break;
if($test) return;
この場合、プログラマーにとって重要なことは、コードを実行したくない例外的なケースをすばやく発見することです。これはすべて、実行ブロックではなく$ testでカバーされます。
ブレースを最初から正しくすることで、これをデバッグする必要がなくなります。
if (statement)
do this;
else
do this;
do that;
;
:)
中括弧を使用することを好みます。ブレースを追加すると、読みやすく、変更しやすくなります。
中括弧を使用するためのリンクを以下に示します。
私の経験から、最初のフォームの(非常に)わずかな利点はコードの可読性であり、2番目のフォームは「ノイズ」を追加します。
しかし、最近のIDEとコードの自動生成(またはオートコンプリート)では、2番目の形式を使用することを強くお勧めします。中括弧を入力するのに余分な時間を費やすことはなく、最も頻繁に発生するバグのいくつかを回避できます。
十分なエネルギーを消費するバグがあり、人々は大きな時間の無駄のためにドアを開けるべきではありません。
コードを書くときに覚えておくべき最も重要なルールの1つは一貫性です。誰が書いたかに関わらず、すべてのコード行は同じように書かれるべきです。厳密であることにより、バグが「発生」するのを防ぎます;)
これは、変数、メソッド、ファイルに明確かつ明示的に名前を付けたり、正しくインデントしたりすることと同じです...
私の学生がこの事実を受け入れると、彼らは自分のソースコードとの戦いをやめ、コーディングを非常に興味深く刺激的で創造的な活動と見なし始めます。彼らは神経ではなく心に挑戦します!
それは好みの問題です。私は個人的に両方のスタイルを使用しています。これ以上ステートメントを追加する必要がないと合理的に確信している場合は、最初のスタイルを使用しますが、可能であれば2番目のスタイルを使用します。最初のスタイルにこれ以上ステートメントを追加することはできないので、一部の人々がそれを使用することを推奨しないと聞いています。ただし、2番目の方法では追加のコード行が発生するため、ユーザー(またはプロジェクト)がこの種のコーディングスタイルを使用する場合、最初の方法は単純なifステートメントに非常に適しています。
if(statement)
{
do this;
}
else
{
do this;
}
ただし、この問題の最善の解決策はPythonであると思います。空白ベースのブロック構造では、ifステートメントを作成する方法が2つありません。1つしかありません。
if statement:
do this
else:
do this
これには中括弧をまったく使用できないという「問題」がありますが、最初のスタイルよりも行が少なくなり、ステートメントを追加できるという利点があります。
私は、コードで明示し、中括弧を使用する方がよいという事実において、ほとんどの回答に同意します。個人的には、一連のコーディング標準を採用し、チームの全員がそれらを知って準拠するようにします。私が作業している場所では、.NETプロジェクト用にIDesign.netによって公開されたコーディング標準を使用しています。
中かっこを付けることをお勧めします。しかし、時々、三項演算子が役立ちます。
の代わりに :
int x = 0;
if (condition) {
x = 30;
} else {
x = 10;
}
単に行う必要があります: int x = condition ? 30 : 20;
また、ケースを想像してみてください:
if (condition)
x = 30;
else if (condition1)
x = 10;
else if (condition2)
x = 20;
あなたが中かっこを入れればそれははるかに良いでしょう。