首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪些语句可以被视为出口点?

哪些语句可以被视为出口点?
EN

Software Engineering用户
提问于 2020-10-07 17:34:33
回答 1查看 300关注 0票数 1

对于每个函数只有一个或多个出口点是否更好,有很多讨论,但我不清楚哪些语句可以被视为出口点:只有return还是其他一些语句?

例如,我们应该考虑throwbreak作为出口点吗?

有两个或三个出口点吗?

代码语言:javascript
复制
func(x, y) {
  // guard
  if (!x)
    throw "You have an error here!"

  if (y)
    return "foo"
  else
    return "bar"
}

有一个或零个出口点吗?

代码语言:javascript
复制
func() {
  i = 1
  loop {
    if (i == 5)
      break
    
    show_message(i)
    i = i + 1
  }
}
EN

回答 1

Software Engineering用户

回答已采纳

发布于 2020-10-07 21:30:45

对于一个函数,出口点是函数离开的所有位置:

  • 返回语句
  • 到达函数体的末尾,如果语言允许的话(隐式返回)
  • 如果语言允许的话,终止程序(例如exit())。
  • 显式抛出:这是例外,但事实上您离开了函数。
  • 隐式抛出:让我们弄清楚,通常情况下,不例外安全的代码可能会退出一个函数,并且可能会留下一些混乱,特别是如果函数从OS分配了一些资源(例如OS互斥集、创建但未销毁的OS临时文件等)。

但在讨论单一出口点时,所有这些真正的出口点都是无关紧要的。这样的讨论是关于代码可读性的,只是根据正常的业务流程有意退出。在这方面,只有返回和终止是相关的。

异常处理遵循一个替代流,该流被排除在单个出口点间。事实上,异常处理可以使异常情况比没有异常处理的等效代码更安全和更易读(在这方面,请参见米斯拉C++ 6-6-5的“异常”一节和Autosar C++14第6.8.4节,它们都是安全编码标准,并将异常排除在各自提倡的单一出口点理念之外)。

票数 4
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/416667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档