尤達表達式是什么?
尤達表達式是計算機編程中的一種風格,其中表達式的兩個部分與條件語句中的典型順序相反。
這種風格的命名,來源於星球大戰的一個角色,絕地大師尤達(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 */ }
缺點
與常規的編程直線思維相悖,造成代碼閱讀和理解上的不順暢,缺乏可讀性。
總結
尤達表達式的優點,其實可以通過其他方式去避免所犯的錯誤。例如第一個條件語句寫成賦值語句,可以由代碼檢查工具檢測出來。反而是可讀性的缺陷,影響多人寫作開發和維護。所以,要避免使用尤達表達式。
怎么規避尤達表達式
書寫條件語句時,避免常量在前,變量在后去進行比較。應該按變量在前,常量在后的方式去書寫。