之前本來的 Angular2 和 AngularDart 就是分開寫的, 後來引進 typescript 策略後才合併 dart 和 js.
這是 DRY, code reuse.
現在 google 裡用 dart 的人變多了, 受不了用 js 思考的 api. 決定加個專屬的團隊開發純 dart 的 angular dart.
這叫 wrong abstration is worse than duplication.
不是 DRY 就是對的, 小至一個 method call, 大至一個 web framework, 都一樣.
就原討論來看,跟 Functional programming 比較沒有關係,感覺只是想設計 Method chain 的問題,也就是將 if 判斷從程式碼中去除,或說是隱藏至 API 中。
如果真要跟 Functional programming 有關係,那麼就得考量像 filterElse、mapElse、reduceElse 之類的 API,因為每個人在迴圈中做的事不同,而且 xxxElse 可以指定的兩個任務必須是相同性質。
例如 filterElse 的話,兩個任務都要是 filter,而不能像是去做得到單一值的任務,或者是去做了 map 的動作,也就是像(也許還得加上 p1、p2、p3 這類判斷條件):
source.filterElse(p1, a, b) // a 、b都是filter,只是filter條件不同
.mapElse(p2, c, d) // c、d都是map,只是map方式不同
.reduceElse(p3, e, f); // e、f都是 reduce,只是reduce方式不同
原討論舉 foreachElse 容易讓人誤會,因為 Java 8 中 foreach 的本質就是 imperative 的。
至於 while 或 for 要不要搭 else,那太容易造成誤會,Python 中雖然有,一直以來也不建議使用,有人說那是因為 else 只會在迴圈中沒有 break 時執行,不過,改成 else 會在迴圈中有 break 時執行,或者是 else 只有在迴圈沒有執行時執行,我想都會有人有話說。
for ... else
很難懂吧, else 的條件是什麼? 有沒有 break ?
for (...) {
} else if break {
}
這樣也許好一點
看起來作者是想要 for ... else { if no iteration }
不過看到這語法可能有人會認為是 for ... else { if any break }
而這在 python 是 for ... else { if none break }
Effective Python1 Item 12: Avoid else Blocks After for and while Loops
也許 refactor 比較增加這種語法好
JEE 在我們這群人的圈子裡 (startup, freelancer, hacker... blah) 大概不太在意吧。我們這群比較愛在網路上發言,但企業裡的反而是沈默的一群開發者,他們多半按照標準行事。
有標準就是穩定、有認證的證書、補充人員成本低… 等等企業很在意的重點。JEE 如果垮了對他們很傷,今天看到已經有人在 change.org1 上連署 oracle 不可放棄 JEE,唉唉。
我個人的話一直是 spring 派,曾經有一段時間我還認定 JEE 早就死掉了,但沒想到看了一些調查,像是 JSF 這樣的東西居然有一大半的人還在用,我看了差點沒暈倒… "標準" 的威力太驚人了,只要是標準就有企業會投資在這技術上,不論這技術設計的優劣。
Oracle 若放棄了 JEE,失去了標準的保障,會發生什麼事呢?新專案新計畫不會有人再選 JEE 了,但 JEE 不會瞬間消失,反而會有新的組織出來帶頭 JEE 的發展 (fork) ,然後承接原本 JEE 該做的事。
也許這是個商機也說不定,因為投注在 JEE 的企業很多,他們很需要維護和升級,試想如果 spring 乘機出了個 JEE 無痛轉換 spring 的套件,然後還提供轉移相關的證書和課程,有多少企業會買單?