2

Ars Technica上也讨论过关于iOS Crypto Flaw的讨论后,有人提到他们遇到了一种情况,即无括号表达式后面的行被视为.ifelse

if (<condition>)
   <expression A>;
   <expression B>;
<expression C>;

因此,根据该人的说法,如果条件为true ,则表达式 B将被跳过,就好像是隐含的和不必要的。else

这与我所听到的相反——我的经验是,如果条件为真,那么所有三个表达式都会被执行——但鉴于我是一个支持括号的拥护者,我的经验可能是有限的,所以我犹豫不决彻底把人叫出来。相反,我花了大约 10 分钟来澄清并确保我正确理解了他们在说什么:)

他们说的有道理吗?什么语言?

我很确定所有主要的脚本语言都遵循我的理解。我认为这个人在 Objective-C 方面有更大的背景。但如果这是真的,那肯定是总是使用括号的最大理由。

4

1 回答 1

1

那将是非常不合逻辑的,我强烈怀疑任何具有这种语法规则的语言都会获得很多支持(尽管我选择使用的语言都有我更喜欢的语法,所以这当然是可能的)。

任何可能的实现方式(我能想到的)都会导致在查看语言中的其他语法规则时看似不一致的行为,或者在可能的情况下非常限制,并且无论哪种方式,最初都会损害可读性 - 如果它具有相同的缩进,那么您将如何在其块中使用具有多行的 if 语句,或者这会被禁止吗?如果该else部分会减少缩进,那么您将如何区分属于 的一部分的else代码,或者是在 if 语句之后的代码,或者每个 if 语句都必须有一个else部分?无论哪种方式,多线else也是一个问题。如果它纯粹基于何时有或没有花括号或类似内容,那么这将是非常令人困惑的开始。

也就是说,还有深奥的语言,它确实有一个“任何事情都可以”的座右铭。

一种深奥的编程语言(有时缩写为 esolang)是一种编程语言,旨在测试计算机编程语言设计的边界,作为概念证明或开玩笑。

如果有一种具有这种语法规则的深奥语言,我不会感到惊讶,也不会特别有意义。

另一种选择可能是该人正在考虑这样的情况:

<type> someFunction()
{
   if (<condition>)
      return <expression A>;
   return <expression B>;
}

这将else与第二个 return 语句之前的显式同义,因为 if 语句中的 return 语句将导致其后的 return 语句仅在条件为假时执行。

于 2014-03-03T12:39:36.763 回答