1

有时我的同事对使用该return语句离开例程(在结束之前)皱着眉头,因为它看起来像是一种隐藏的 goto 并且所有 goto 都是邪恶的。我既不认为 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

仅在过程/函数退出时返回是 Dijkstra 结构化编程理论的一个方面:

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

(另见:http ://en.wikipedia.org/wiki/Go_To_Statement_Considered_Harmful )

从理论上讲,结构化编程导致代码更容易阅读,并且错误更少。看看这个。

于 2012-09-10T19:33:12.077 回答