Function 给过程留下一个返回语句是一件坏事吗?

Function 给过程留下一个返回语句是一件坏事吗?,function,return,Function,Return,有时,我的同事会对使用return语句(在结束之前)离开一个例程感到不满,因为它看起来像一种隐藏的goto,所有的goto都是邪恶的。我既不认为无论如何使用goto都是不好的,也不明白为什么这样使用return是如此糟糕 这个问题相对独立于语言。我目前使用PL/SQL和Objective-C编程,所以我给出了这种语言的示例 目标-C -(void)finishedLoading:(NSString*)result success:(BOOL)success { NSLog(@"dele

有时,我的同事会对使用
return
语句(在结束之前)离开一个例程感到不满,因为它看起来像一种隐藏的goto,所有的goto都是邪恶的。我既不认为无论如何使用goto都是不好的,也不明白为什么这样使用
return
是如此糟糕

这个问题相对独立于语言。我目前使用PL/SQL和Objective-C编程,所以我给出了这种语言的示例

目标-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;

这些示例实际上只是示例,可能会受到批评,但我更想知道为什么不应该执行
返回。我所看到的唯一的替代方案是使用一个常规的广泛包含的if语句,该语句可能包含嵌套的if,这使得它很难阅读,但有些人更喜欢这样,我从来没有弄清楚原因。

我认为这很好。事实上,我尝试在顶部进行所有验证,在方法的“肉”之前,根据需要投掷或返回。使用更少的嵌套if/else等使事情更简单。使用更少的代码路径进行单元测试也更容易。

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

(另见:)


从理论上讲,结构化编程使代码更易于阅读,bug更少。看看吧。

什么?!?不可能,如果函数终止有一个合理的原因(不能执行它的工作,已经找到了要搜索的东西等),那么它就非常有效,这是IMO应该做的事情。这个问题存在于:,作为“白板”问题,它可能更适合。事实上,至少有两个被删除的SO实例:,这表明它对SO来说可能太主观了。尽管这里有一个关于SO的现存版本:@Josh Caswell:感谢您指出已经存在的答案。我忽略了SO中的一个问题,显然这是一个关于程序员的问题,我从来没有研究过。事实上,我并不太清楚它的存在。