0

プロセスを中断するため、条件付きまたはループの途中に return を配置できないことを指摘したことがあります。しかし、あなたができるなら、もっと良いことを私に示しました。よくわかりません。通常、関数で発生します

リターンを入れてもらえますか?そうではありませんか?なんで?それとも違いはありませんか?

例:

if (i == 0)
{
    //other code
    return true;
}
else
{
    //other code
    return false;
}

また

if (i == 0)
{
    //other code
    b= true;
}
else
{
    //other code
    b= false;
}
return b;
4

4 に答える 4

2

あなたの2つの例は基本的に機能が同等であり、どちらも機能します。実際、最適化コンパイラは、2 番目の例を最初の例に簡単に変えることができます。

ほとんどのプログラマーは、意図がより明確であるため、最初の方法を好む可能性があります。

于 2013-11-09T02:02:03.620 に答える
1

リターンは一番下に1本ある方が良いです。そうすれば、入口と出口は 1 つずつしかありません。どこで終了するかを気にする必要がない場合、コードのデバッグがはるかに簡単になります。これは、非常に短いメソッドでは大したことではありませんが、数百行に及ぶ長いメソッドの場合は、はるかにクリーンです。

于 2013-11-09T02:00:34.760 に答える
1

ループの途中で戻るという実際的な意味はありません。すべきではないと人々が言うのを聞いた場合、それはコードの可読性に基づいているに違いありません。関数からの終了点が複数ある場合、一部のコードが見苦しくなる可能性があります。また、ほとんどの場合、ルーチンを終了する前にクリーンアップを行う必要があります。そのため、通常、プログラマーはクリーンアップ ルーチンを 1 つの場所に保持し、常にそのパスから終了する傾向があります。複数の出口点がある場合は、これらすべての場所にクリーンアップ ルーチンを追加する必要があります。これにより、コードが重複し、コードの可読性が損なわれます。リターンを含むコードがあちこちに散らばり、最終的にクリーンアップが適切に行われず、メモリ リークが発生するのを見てきました。

より大きな問題は、ほとんどの場合、現在記述しているコードが長期間存続し、メンテナーが変わり続け、ある時点で、存在するすべてのコード行の意図全体が理解されなくなることです。これらすべての混乱に追加されます。

そうは言っても、ループの途中でリターンを含む非常に美しく書かれたコードをたくさん見てきました。

于 2013-11-09T02:05:47.293 に答える
0

これは、ルールやパフォーマンスの問題ではなく、スタイルの選択です。2 番目のコード例は、関数内のコードが上からのみ入力され、下からのみ終了する「1 つのエントリ、1 つの終了」アプローチに従います。この背後にある考え方は、これがより "安全" で、コード フローに従うのが簡単だということです。動的ストレージを手動で設定すると、安全性が発揮されます。単一の戻り点で、すべてのメモリを確実に解放できます。もちろん、Java や C# などの言語は動的ストレージを行うため、これは実際には問題になりません。また、関数の途中で複数回終了する場合 (特に非常に長い場合)、関数が戻る原因を追跡するのが難しい場合があります。

ただし、関数の最後でのみ終了することを選択すると、フラグを設定およびチェックしてより多くの状態を追跡する必要がある場合があるため、独自の問題が発生する可能性があります。

元の質問に関しては、最新のプログラミング言語では何も壊れません。それはすべてあなた次第です。あなたが従いやすいと思う方法で行ってください。

于 2013-11-09T02:07:21.687 に答える