程式語言中表示式更優於語句

banq發表於2024-05-09


表示式應該優於語句:這才是程式語言設計的更簡單方式!

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

這種區分帶來了問題:

  • 不能自由地在需要表示式的地方使用語句,反之亦然
  • 需要不斷進行上下文切換和語法改變。(上下文切換類似讓你開不同型別的會議,類似讓CPU做執行緒上下文切換)

表示式和語句之間的區別使事情變得更加複雜:

  • 因為你不能隨意在需要表示式的地方使用語句,反之亦然。
  • 在重構程式碼時需要進行上下文切換和語法修改。這也就是說:重構比重寫更危險,重構不如重寫,因為你以為你瞭解了上下文,你以為你你瞭解了大象,其實你摸的是耳朵,然後,你就在耳朵這個上下文裡重構大象,雙倍複雜。

兩種語句的問題:

  • 函式則帶來了更多的複雜性,因為其主體是語句而不是表示式,從而破壞了參照的透明度。
  • 使用 try/catch 進行異常處理也有問題,因為它通常只能作為語句而非表示式使用。

總之,表示式和語句之間的區別以及對語言結構的不一致處理,使程式設計變得更加困難和容易出錯。

語言設計者的認知偏見:

  • 繫結和迭代等語言構造常常被語言設計者任意指定為語句或表示式,這是基於實現的方便性而非語言設計原則。

好的語言設計應該:

  • 讓所有語言結構都成為返回值的表示式,就像在 Lisp 和 OCaml 中那樣,避免表示式/語句之分帶來的複雜性。

 

相關文章