$('#replyList_692_22').html('

Valentino Young07/14

如果要的是類似SQL的 \'...Order By COL1,COL2,COL3...\',
僅止於同一資訊層面上的參考先後次序,
而不用顧慮不同邏輯層面的優先順位的話,
利用Ordering#compound, 就可以寫出由左往右讀即可的程式碼.

* * *

之所以呈現出\'由右往左讀才是操作順序\'的現象,
是由於為了讓委託單純化:
每一個環節只需要先處理自己的邏輯, 再調用委託者的邏輯,
就可以跑過操作鏈上所有的環節.

反之如果要由左往右的話, 每個環節無法用單純的\'自己該做的做完後就交給他人\'的方法,
最後出來的程式碼不管是結構還是執行的跳越方式都會變得複雜.

另外像是nullFirst/nullLast的需求,
也只能透過\'先處理自己的邏輯, 再調用委託者的邏輯\'的順序才不至於出錯.

* * *

如果產生一個Ordering是為了取得一個Comparator,
然後去 new TreeSet(comparator), Collections.sort(list, comparator)等等...的話,
要由右往左讀大概一直都無法不覺得彆扭;
然而如果產生一個Ordering是為了直接利用Ordering上頭的min/max/sortedCopy/...等方法,
也許就很容易習慣成自然地由右往左讀.

* * *

實際上個人覺得 Ordering#onResultOf應該像Ordering#from, Ordering#compound...等等一樣,
設計成static method, 限定在操作鍊的起頭, 而非可自由尾隨在任一個環節之後.

--- 所有有關資訊選用先後次序層級的定義, 都是頭一個宣告, 作為本體作為名詞,
然後nullFirst之類的邏輯順位當成形容詞, 當成依附條款...
...如此才能正確有效地利用Ordering.

(同理, Ordering#compound也應該只留下static method, 方可在閱讀方向上維持一貫)

');