次のようなコードを見てきました。
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 番目の形式を使用する方が賢明です。
編集: Ned はコメントでこれを指摘していますが、ここにもリンクする価値があると思います。これは単なる象牙の塔の架空のでたらめではありません: https://www.imperialviolet.org/2014/02/22/applebug.html
ステートメント ブロックを除外することの 1 つの問題は、else のあいまいさです。つまり、C に影響を受けた言語はインデントを無視するため、これを分離する方法がありません。
if(one)
if(two)
foo();
else
bar();
これから:
if(one)
if(two)
foo();
else
bar();
私の一般的なパターンは、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」ステートメントが何かを行うためにテストしている場合 (IE 呼び出し関数、変数の構成など)、中かっこを使用します。
if($test)
{
doSomething();
}
これは、どのような関数が呼び出され、どのような条件でプログラムの流れがどこに向かっているのかを明確にする必要があると思うからです。この状態でどの関数が呼び出され、どの変数が設定されているかをプログラマーに正確に理解させることは、プログラムが何を行っているかをプログラマーが正確に理解できるようにするために重要です。
「if」ステートメントが何かを停止するためにテストしている場合 (ループまたは関数内の IE フロー制御)、1 行を使用します。
if($test) continue;
if($test) break;
if($test) return;
この場合、プログラマーにとって重要なことは、コードを実行したくない例外的なケースが何であるかを迅速に発見することであり、それはすべて実行ブロックではなく $test でカバーされます。
使用している 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 (statement)
do this;
else
do this;
do that;
単純なステートメントであっても、すべての if ステートメントに中かっこを使用します。または、単純な if ステートメントを書き直して、三項演算子を使用します。
if (someFlag) {
someVar= 'someVal1';
} else {
someVar= 'someVal2';
}
このようにずっと良く見えます:
someVar= someFlag ? 'someVal1' : 'someVal2';
ただし、if/else ブロックに入れる必要があるものが他にないと確信できる場合にのみ、三項演算子を使用してください。
私はブレースを使用することを好みます。中括弧を追加すると、読みやすく、変更しやすくなります。
ブレースを使用するためのリンクを次に示します。
私の経験から、最初の形式の唯一の (非常に) わずかな利点はコードの読みやすさです。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
それには中括弧をまったく使用できないという「問題」がありますが、最初のスタイルよりも多くの行がなく、より多くのステートメントを追加できるという利点があります。
個人的には、最初のスタイルを使用して、例外をスローするか、メソッドから時期尚早に戻るだけです。関数の先頭で引数をチェックするのと同じように、これらの場合、複数のことを行うことはめったになく、else がないためです。
例:
if (argument == null)
throw new ArgumentNullException("argument");
if (argument < 0)
return false;
それ以外の場合は、2 番目のスタイルを使用します。
私は常に自分のコードを標準化し、できるだけ同じように見えるように努めてきました。これにより、他の人が更新を担当するときに読みやすくなります。最初の例を実行して途中に行を追加すると、失敗します。
動作しません:
if(文) こうする; この; それ以外の場合はこれを行います。
私の個人的な好みは、次のように空白と括弧を組み合わせて使用することです。
if( statement ) {
// let's do this
} else {
// well that sucks
}
これはきれいに見え、コードを非常に読みやすくし、最も重要なことにデバッグを容易にすると思います。
コードで明示的に中括弧を使用する方が良いという事実で、ほとんどの回答に同意します。個人的には、一連のコーディング標準を採用し、チームの全員がそれらを理解し、準拠していることを確認します。私が働いている場所では、 IDesign.netが発行した .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;
中括弧を入れた方がずっと良いでしょう。