ループや一連の if/else ステートメントがあり、ネスト内から値を返したい場合 (以下を参照)、値をフィールドまたはプロパティに割り当てて返すのが最善の方法です。それ?
下記参照:
bool b;
public bool ifelse(int i)
{
if(i == 5)
{
b = true;
}
else
{
b = false;
}
return b;
}
ループや一連の if/else ステートメントがあり、ネスト内から値を返したい場合 (以下を参照)、値をフィールドまたはプロパティに割り当てて返すのが最善の方法です。それ?
下記参照:
bool b;
public bool ifelse(int i)
{
if(i == 5)
{
b = true;
}
else
{
b = false;
}
return b;
}
どうですか
return i == 5;
これには複数の見解があります。ほとんどの人 (私を含む) は、回答が得られたらすぐに戻ることを好む傾向があると思います。メソッドの最後のステートメントでのみ戻るべきだと主張する人もいます。ただし、状況によっては、実際には事態がより複雑になる可能性があります。
私が提案したことによれば、あなたの例はより短くて簡単になります:
public bool ifelse(int i)
{
if(i == 5)
{
return true
}
return false
}
メソッドの戻り値を計算するためだけに b を使用する場合は、ローカル変数 (メソッド内で定義) にする必要があります。
public bool ifelse(int i)
{
bool b;
/*
Some code to calculate b
*/
return b;
}
他の人が示唆しているように、メソッドが単純な場合は、一時変数の使用を完全に避け、結果が判明次第すぐに返します。一般的なルールは、コードを読みやすくする方法を使用することです。
指摘したように、複数のreturnステートメントがあると、それらを見つけるのが難しくなるという欠点があります。OTOHの場合、そのreturnステートメントにエスケープするために必要な追加のロジックは、スタイルが解決している問題よりも悪い場合があります。
複数の返品について私が知っている主な問題は、新しい返品ポイントでクリーンアップ処理などを行うのをすぐに忘れてしまう可能性があることです。エスケープパスにはそのコードを含める必要があり、他のコードは含めないため、これは単一の戻りフォームの場合と同じくらい問題です。これに対する1つの解決策は、c#などの一部の言語で利用可能であり、finallyブロックであるか、ここに示すようにスコープステートメントからより適切になります。(OK私は今私の石鹸箱を手に入れます)
一般に、メソッドから返すべき場所は 2 か所だけであるとします。つまり、先頭付近 (ガード条件など) と末尾付近です。メソッドにある程度の長さがある場合は、前述のように一時変数を使用する必要があります。そうしないと、コードを読んでいる人がコードをたどるのが難しくなる可能性があります。
はい、それは良いスタイルです。
別の方法(これは悪いことです)は、これを行うことです:
public bool ifelse(int i)
{
if(i == 5)
{
return true;
}
else
{
return false;
}
}
複数のリターン ポイントが不適切なスタイルと見なされる理由は、特に大規模なメソッドの場合、メソッドはいつでも終了する可能性があるため、メソッド内のプログラム フローを追跡するのが難しい場合があるためです。これは、デバッグするのに悪夢になる可能性があります。ただし、割り当てる戻り変数がある場合は、その変数を監視して、いつ返されるかを (1 つの場所から) 正確に知ることができます。
プログラミングのすべての文体には、良い面と悪い面があるため、常にそうとは限りません。