cfchou 積分 0

是指在 iteration 中 break 嗎?

我也想知道 fp 的 idiom

好像 for..loop 本身就是很 imperative, 可是 fp 偏愛 declarative

或許簡單的情況下可以:

collection.takeWhile(predicate).foreach(foo)

複雜的 看過一種做法:

collection.toStream 後每個 iteration returns Either<Success, Fail> 然後 lazily evaluate, stop when getting Fail

cfchou 積分 1

看起來作者是想要 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 比較增加這種語法好

cfchou 積分 3

不喜歡RxJava就算了 幹嘛黑Scala嘛 哭哭

我覺得Scala複雜與否是個相對的觀念, 跟個人經驗, 解決問題種類, 甚至於市場都有關.

Scala本身複不複雜? 在 community 裡面討論的複雜, 應該是設計者們討論一些更進階的語言features. 我相信跟一般developers所說的複雜不太一樣. 舉兩個跟 Java 開發者的個人經驗比較有關係的例子:

  1. functional programming w/ type system: Scala 使 FP 更複雜了嗎? 跟 Haskell 同樣東西作比較, immutable data, algebraic data type, map/filter/fold/monoid/functor/monad, etc. 這些 FP 的 patterns 型別的宣告以及內部實作大同小異. 所以 developers 不習慣的我覺得是 FP & static type system. 就算改用其他 FP languages 障礙還是存在, 小弟認為真正的問題點是如何/為何 Think in FP.

  2. generics w/ type variance: Java 的 List<E> 不是很好嗎 Scala List[+A] 搞這麼複雜幹嘛? 但話說 Java 也有 variance 啊~ 就 wildcard super/extends 用在 collecions 上. 但是我估計一半以上的 Java developers 不寫 bounded wildcard generics. 大部分人覺得 collections 可以用就好了, invariant 也沒差, type erasure/reification/unchecked warning 管他的. Angelika 的 Java Generics FAQs 可能九成的人沒聽過. 而且我們寫了一堆 code, 是芥末日也(還)沒到. Java 有這樣的好工具而把他藏著. 好處是 developers 不需要會用它也可以寫 code. 壞處是也只有少數人用這個feature, 而一個developer 想用也不太敢, 因為做出的東西難保其他人懂. 這樣真的是好現象嗎? Scala 則說有 variance 就要用啊 讓 type system 輔助 api 的設計以及使用. 是的, 很多人不習慣. 但是好東西不學嗎

cfchou 積分 0

這可能跟 scoping 有關而不是 type inference 喔. type inference 從 scope 有的才推出.

作者講的困擾可能可以由(未來?)IDE 自動 import implicitly inference 出來的 types.

不過這對我來說不是很大的問題.