尤達表示式

我是leon發表於2018-05-09

尤達表示式是什麼?

  尤達表示式是計算機程式設計中的一種風格,其中表示式的兩個部分與條件語句中的典型順序相反。
  這種風格的命名,來源於星球大戰的一個角色,絕地大師尤達(Yoda)。劇中,該角色喜歡以顛倒的語序說英語。比如“當九百歲你活到,看起來很好你將不”
  下面舉個例子:

// 正常的寫法
if(number == 7){/* code */}

// 尤達表示式
if(7 == number){/* code */}

  特點就是:將表示式的常量部分放在條件語句的左側

Yoda

為什麼要避免使用尤達表示式

  評判一個東西的好壞,通常都需要比較。那就先看看尤達表示式有什麼優缺點

優點

  • 捕捉編寫程式意外引起的錯誤

  例如以下判斷,由於判斷相等少寫了一個=號,導致程式執行中發生意外的賦值操作

if (number = 7) { /* code */ }

  而使用尤達表示式,則可以在編譯時捕捉到這個錯誤

if (7 = number) { /* code */ } // Uncaught ReferenceError: Invalid left-hand side in assignment
  • 解決不安全的null型別操作

  例如Java中的equals比較

String myString = null;
if (myString.equals("hehe")) { /* code */ } // This causes a NullPointerException in Java

  尤達表示式的方式可以避開

String myString = null;
if ("hehe".equals(myString)) { /* code */ } 

缺點

  與常規的程式設計直線思維相悖,造成程式碼閱讀和理解上的不順暢,缺乏可讀性。

總結

  尤達表示式的優點,其實可以通過其他方式去避免所犯的錯誤。例如第一個條件語句寫成賦值語句,可以由程式碼檢查工具檢測出來。反而是可讀性的缺陷,影響多人寫作開發和維護。所以,要避免使用尤達表示式。

怎麼規避尤達表示式

  書寫條件語句時,避免常量在前,變數在後去進行比較。應該按變數在前,常量在後的方式去書寫。