尤達表示式是什麼?
尤達表示式是計算機程式設計中的一種風格,其中表示式的兩個部分與條件語句中的典型順序相反。
這種風格的命名,來源於星球大戰的一個角色,絕地大師尤達(Yoda)
。劇中,該角色喜歡以顛倒的語序說英語。比如“當九百歲你活到,看起來很好你將不”
。
下面舉個例子:
// 正常的寫法
if(number == 7){/* code */}
// 尤達表示式
if(7 == number){/* code */}
特點就是:將表示式的常量部分放在條件語句的左側。
為什麼要避免使用尤達表示式
評判一個東西的好壞,通常都需要比較。那就先看看尤達表示式有什麼優缺點
優點
- 捕捉編寫程式意外引起的錯誤
例如以下判斷,由於判斷相等少寫了一個=
號,導致程式執行中發生意外的賦值操作
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 */ }
缺點
與常規的程式設計直線思維相悖,造成程式碼閱讀和理解上的不順暢,缺乏可讀性。
總結
尤達表示式的優點,其實可以通過其他方式去避免所犯的錯誤。例如第一個條件語句寫成賦值語句,可以由程式碼檢查工具檢測出來。反而是可讀性的缺陷,影響多人寫作開發和維護。所以,要避免使用尤達表示式。
怎麼規避尤達表示式
書寫條件語句時,避免常量在前,變數在後去進行比較。應該按變數在前,常量在後的方式去書寫。