為了雪恥報名參加了證照考試,現在正在為期兩週的密集訓練,第一天的課程就讓我傻眼,練習用的考古題實在很恐怖,幾乎是我寫程式寫個一百年也不太可能遇到的鳥問題,現在都成了證照考題。
舉個例子:
int a = 0;int b = 5;
if( a != 0 && b++ > 5 )
//do something....
System.out.println(b);
這題選擇題有幾個選項:編譯時發生錯誤、執行時發生錯誤、b = 5、b = 6。答案是 b = 5 因為 Java 使用「&&」做判斷時發生 short-circuit 以致於第二個判斷式不需執行。不爽的不是考試考 short-cirsuit 問題,而是為什麼會在條件式裡面寫「b++」?
把運算是寫在條件式裡面當然省事,但是高階語言就是為了提高可讀性還這樣搞,這種程式設計師倒不如叫他去寫機器碼,不然之後要維護他的程式還要浪費一堆人力和時間。
幹,以後寫程式我都要這樣寫:
//Code in C
int l11l1l111l1 = 0;
printf("%d %d %d", l11l1l111l1++, l11l1l111l1++, l11l1l111l1++);