回覆列表
  • 1 # NC少年

    先說核心觀點:表示式解決"是什麼"的問題,表示的是一個值;語句解決"做什麼"的問題,表示的是一個動作。設計程式語言的要求,邏輯更清晰,更容易設計便於程式設計師更好的、更精確地交流表示式、語句的區別

    所有程式碼都有語句組成(簡單語句、複合語句),而表示式可能是語句的一部分。以自然語言來類比下,“買一本書”,其中“買一本書”整體是一個語句,而“書”是一個表示式。程式碼是要執行的,本質上是執行一堆指令的過程,所以程式碼由語句組成。但是要執行一條語句,可能需要先明確“表示式”的值,否則計算機會模糊。

    以Python為例, 可以print的都是表示式:

    比如print(3), print(max(3, 9)) 都能執行成功,表明3和max(3,9)都是一個表示式。

    而print(x=3), print(import numpy)會報錯,說明x=3, import numpy不是表示式,其中前者是一個賦值語句,後者是一個匯入語句。

    有時候,一個語句可能全部由表達是組成,稱之為表示式語句,其中該語句的表示的動作是“求該表示式的值”,python官方文件的原文是:

    表示式語句用於計算和寫入值(大多是在互動模式下),或者(通常情況)呼叫一個過程 (過程就是不返回有意義結果的函式;在 Python 中,過程的返回值為 None)。表示式語句會對指定的表示式列表(也可能為單一表達式)進行求值。

    這一點,可能會讓很多人模糊糾結,其實使用起來不用太較真,只要記住表示式用來表示的是一個值,語句表示的是一個動作。

    如果讓你設計一門新的程式語言,要區分表示式和語句麼?

    你可能說,那太難了,我就是一個語言的使用者。那換個問題,如果讓你設計一輛汽車,你需不需要將汽車拆分成發動機、車架、車窗、輪胎等各個零件?作為設計師,你為什麼要拆分呢? 我想一種答案,可能是拆分後,每個人可以關注與自己的細分領域,效率會更高。

    一門程式語言的誕生,語法要足夠嚴謹。如果語法模糊,編譯器會困惑,軟體開發人員作為使用者會更困惑,嚴重影響體驗。語法要嚴謹,就要將語句進行進一步的拆分。打個比方,程式設計同樣如此,這樣邏輯會更清晰,更容易設計。絕大多數語言的設計,都會區分表示式和語句的。

    便於交流

    程式設計師會有很多專業術語,這些術語就是為了更好、更準確的交流。想象下,如果不區分兩者,碰到兩個較真的程式設計師,那兩人可能會每次都要花額外的時間,來確定一個模糊兩可的詞彙,都會去猜、然後去確認。豈不是溝通效率很低?

    這個問題我之前也糾結過,站在程式語言的設計視角可能會更容易理解,更容易明白原因。

  • 中秋節和大豐收的關聯?
  • 步行街上返租的商鋪能買嗎?