首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件表达式中术语的顺序

问条件表达式中术语的顺序
EN

Software Engineering用户
提问于 2015-07-23 21:13:34
回答 3查看 106关注 0票数 2

考虑以下循环(在Swift中--但我的问题与语言无关):

代码语言:javascript
复制
    var index = standardizedTimeSpans.count - 1
    while index >= 0 && timeSpan < standardizedTimeSpans[index] {
        index--
    }
    index++ 

在上面的代码中,standardizedTimeSpans变量是一个双倍数组,而timeSpan变量是一个双变量。

上述循环可以将索引的值降到-1的最大值。如果while语句的条件表达式是以相反的方式排序的(即timeSpan < standardizedTimeSpans[index] && index >= 0),则在索引达到-1的情况下,会出现数组超出界限的运行时错误。

我的问题是:

这个代码被认为是“安全的”吗?换句话说,是否存在编译器更改的风险,而不一定对条件值从左到右排序?当然,另一种方法是分别计算条件,但循环中有一个中断表达式。

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2015-07-23 21:18:26

我不确定Swift的具体情况,但通常使用&&运营商短路,如果左侧为假,则提前结束。&&之后的代码将不会运行。

短路在许多语言中是常见的做法。

票数 0
EN

Software Engineering用户

发布于 2015-07-23 21:28:44

“但我的问题是语言独立”

当然,这与语言有关。在任何编程语言中,短路行为是语言定义的一部分,代码是“安全的”。否则就不是了。

幸运的是,我所知道的基于C语言家族的任何一种严肃的编程语言都具有“定义上”的短路行为(以及许多其他编程语言)。我不知道斯威夫特,但由于该语言的发明者是专业人士,我很确定他们关心的是向后兼容性。因此,我不期望将来会以这种语言改变这种行为。

票数 2
EN

Software Engineering用户

发布于 2015-07-23 22:49:33

我的问题是语言独立

不,它不是。

你在假设

  • 评价的顺序是明确的。
  • 评价的顺序是从左到右。
  • &&的右操作数很懒。

这三种语言都依赖于语言。例如,在Visual中,And的两个操作数都是严格的。

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

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

复制
相关文章

相似问题

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