编程语言中表达式更优于语句


表达式应该优于语句:这才是编程语言设计的更简单方式!

  1. 有些编程语言(如 Lisp 和 OCaml)只有返回值的表达式,
  2. 而其他编程语言(如 Java 和 Python)既有表达式,也有不带返回值的语句。

这种区分带来了问题:

  • 不能自由地在需要表达式的地方使用语句,反之亦然
  • 需要不断进行上下文切换和语法改变。(上下文切换类似让你开不同类型的会议,类似让CPU做线程上下文切换)

表达式和语句之间的区别使事情变得更加复杂:

  • 因为你不能随意在需要表达式的地方使用语句,反之亦然。
  • 在重构代码时需要进行上下文切换和语法修改。这也就是说:重构比重写更危险,重构不如重写,因为你以为你了解了上下文,你以为你你了解了大象,其实你摸的是耳朵,然后,你就在耳朵这个上下文里重构大象,双倍复杂。

两种语句的问题:

  • 函数则带来了更多的复杂性,因为其主体是语句而不是表达式,从而破坏了参照的透明度。
  • 使用 try/catch 进行异常处理也有问题,因为它通常只能作为语句而非表达式使用。

总之,表达式和语句之间的区别以及对语言结构的不一致处理,使编程变得更加困难和容易出错。

语言设计者的认知偏见:

  • 绑定和迭代等语言构造常常被语言设计者任意指定为语句或表达式,这是基于实现的方便性而非语言设计原则。

好的语言设计应该:

  • 让所有语言结构都成为返回值的表达式,就像在 Lisp 和 OCaml 中那样,避免表达式/语句之分带来的复杂性。