1

ある同僚returnがルーチンを終了する前にこのステートメントを使用することに眉をひそめることがあります。私は goto がどのように使用されても悪いという考えを共有していませんし、returnこのように使用することがなぜ悪いのかを本当に理解することもできません.

質問は比較的言語に依存しません。私は現在 PL/SQL と Objective-C でプログラミングしているので、この言語で例を示します。

Objective-C

-(void)finishedLoading:(NSString*)result success:(BOOL)success 
{
    NSLog(@"delegate method finished loading invoked");   
    if (!success) {
        self.status.text = @"Failed to load file.";
        return; // IS THIS BAD??
    }

    self.status.text = @"File loaded.";

    // do more stuff here with result string
}

PL/SQL

PROCEDURE example(i_parameter pls_integer)
AS
BEGIN
   IF i_parameter IS NULL THEN
      RETURN; -- is this bad??
   END IF;

   -- do more stuff here

END example;

return例は本当に単なる例であり、そのまま批判されることもあるかもしれませんが、なぜそうすべきでないのかを知りたいです。私が見る唯一の代替手段は、ifステートメントをネストして読みにくくする可能性のあるifステートメントを広く受け入れることですが、それを好む人もいますが、その理由はわかりませんでした。

4

2 に答える 2

2

大丈夫だと思います。実際、メソッドの「肉」の前に、必要に応じてスローまたはリターンのいずれかを行い、すべての検証を一番上で実行しようとしています。入れ子になった if/else などを減らして物事をシンプルに保ちます。また、カバーするコードパスが少なくなるため、単体テストも簡単になります。

于 2012-09-10T19:28:32.633 に答える
1

プロシージャ/関数の終了時にのみ戻ることは、ダイクストラの構造化プログラミング理論の一面です。

http://en.wikipedia.org/wiki/Structured_programming

(参照: http://en.wikipedia.org/wiki/Go_To_Statement_Considered_Harmful )

理論的には、構造化プログラミングはコードを読みやすくし、バグを少なくします。見てみな。

于 2012-09-10T19:33:12.077 に答える