2014-09-03

2014-08-09

  • elleryq says: PTT 現在沒辦法上??
    • a*. :: 之前有公告,到下午五點
    • e*****q says: avhacker: Thanks :-)
  • elleryq says: 明天 8/10 晚上 7:20 東森洋片要上鋼鐵人+浩克的動畫電影,裏面居然有浩克的鋼鐵裝,這樣會不會太強啊?? 真是令人期待。
    • e*****q says: 看完了,以劇情來說,弱弱的,沒想像中那麼精彩。
  • elleryq says: Java 8 的 Optional 跟 C# 的 Nullable 很相近。
    • f***K says: 前一陣子也剛好看到, 但不知道是不是我沒搞懂, 暫時感覺是雞肋? Java 的 reference 不是本來就有 "optional" (因為可 null) 語義?
    • f***K says: "object == null" vs "optionalObject.isPresent()"
    • m*****i says: myObj match {
      case Some(param) => doSomething(param)
      case None => printn("Miao")
      }
    • m*****i says: 為什麼覺得像是在抄 scala ... 上面那段在 Python 是寫成
      if myObj is None:
      blah blah
      else:
      blah blah
    • s*****g :: 不知道他們支不支援完整的 Algebraic Data Type @@ (a.k.a. Scala 的 case class)
    • e*****q says: 我也正在做實驗,C# 的 Nullable 是強制性的只能套用在無法指定為 null 的型別,例如 int 或 bool,但 Java 8 Optional 好像無此限制。
    • e*****q says: C# 的用法是這樣 elleryq/nullable.cs
    • e*****q says: 愈看愈覺得 Java 8 的 Optional 不是很好用... Java 8 Optional, Revisited
    • f***K says: 所以 Java 需要的不是 Optional 而是 Mandatory? (rofl)
    • e*****q says: 我錯了,看似相近,但要解決的問題是不一樣的。C# 主要是為了 int, bool 型別變數無法指定為 null 的情況,但 java 看起來是想解決 Null pointer 問題,可是我覺得不容易讓人知道何時該用,或許以後會有人整理出 best practice 。
    • e*****q says: Java 8 Optional: How to Use it | Javalobby 這篇有提到主要是為了避免過多的 null 判斷處理。從程式看起來,用了 Optional 以後的語意是比使用 null 判斷來的清晰。
    • f***K says: elleryq: 不同意. IMHO, 1. 不太可能避免過多的 null 判斷, 反而是 2. 鼓勵 null 判斷
    • f***K says: 2. 看到 Optional 就要 判斷 null. 除非說把 "obj == null" 換成 "optionalObj.isPresent()" 就是避免判斷 null XDDD
    • f***K says: 1. 原來沒用 Optional 的 API, 如果具有 Optional 語意 (null ref) 單然還是要判斷 null. 所以似乎無法減少
    • s*****g :: 恩...那不知道如果想辦法把計算/判斷 null 的工作丟給 Optional 本身的話呢(概念上啦…)?換句話說,就是把計算放到某種 context 裡面。有的地方把那個叫 optional chaining 的樣子
    • s*****g :: 就是說把 if ... == null ... 然後傳播出去這種東西丟給底層做, 不自己寫判斷.
    • s*****g :: Tired of Null Pointer Exceptions? Consider Using Java SE 8's Opti... 就是像這篇後面程式那樣的東西. Java 8 好像叫他 map/flatMap 之類的 XD?
    • s*****g :: 用 Haskell 的話來說就是 Maybe (or Optional) 是 Applicative/形成個 Monad 之類的, 意思是可以把計算自動串起來
    • s*****g :: (抱歉訊息分這麼散,不知道為何一直被噗浪防洪擋掉)
    • e*****q says: freak: 你說的有道理,實際上是沒辦法減少。或者,它是為了搭配 Lambda/Monad 的用法而產生? 看了例子,我是覺得 orElse() 跟 ofNullable() 應該會是最常用的。
    • f***K says: suhorng: 你說的我懂, 我不懂的是為什麼原來沒有 Optional 之前, 用 reference 無法這樣做? 畢竟 Java 的 reference 本來就有 "optional" (可為 null) 的語義
    • f***K says: elleryq: Monad 我不懂, 要問 suhong XD 我是看不出來跟 Lambda 有什麼關係
    • f***K says: 從一個 Java amature 的角度看 Optional<T> 真的很雞肋. 暫時還是維持前面的看法, Java 需要的應該是 Mandatory<T>
    • f***K says: 雖然口氣像是在批判, 其實我是相信或許它有好的原因或是巧妙的地方. 只是我想不出來, 期待有噗友可以解釋給我聽
    • f***K says: suhorng: 那篇文章剛好上週看過. 有個我一直沒搞懂的地方是, computer 物件的 flatMap 方法是哪來的? 我的理解是 Stream API 要透過 Collection 取得 Stream 物件才可以這樣操作. 是我哪裡誤會了嗎?
    • f***K says: Stream s = someCollection.stream();
      s.flapMap(...) ....
    • n****e says: optional想要解決的應該是如何用type system表示optionality,過往java API習慣使用null來表示這件事,但是這造成幾個問題:
      1. Map.get這種情況如果要怎麼分辨是沒有對應的value還是value本身就是給"empty"的值
    • n****e says: 2. type system無法分辨你的parameter/return value是不是optional。當然可以靠文件以及許多的annotation+靜態分析盡量提高安全性,但是無法單靠型別來分辨這點。
      個人認為optional跟@nullable算是正交的兩個概念
    • n****e says: freak: 因為computer的型別是Optional<Computer>...所以就有flatMap了(那文章這點中後段才有提到)
    • f***K says: ChikeiLee: Thanks, 我沒注意到 (其實還是沒看到 @@)
    • f***K says: 反過來想, 我的認知是 Java 的 reference 本來就沒有 non-optional 這回事, 為何需要 type system 來 confirm optionality?
    • f***K says: 回 1. 覺得 suhong 可能沒有想清楚 (當然, 也有可能沒想清楚的是我 XD). 請試著回答 Optional<T> 要怎麼分辨是沒有對應的 value 還是 value 本身就是給 "empty "的值
    • f***K says: 是我的腦筋打結了嗎? 我怎麼想都是需要某種機制或語法來表達 mandatory, 而不是 optional
    • f***K says: 如果說是像樓主說的 C# 的 Nullable 專門用在 non-nullable 的 type 上 (如 builtin native types) 我能理解
    • f***K says: 但 Java 的 Optional 完全不是這麼一回事呀. 它 "只能" 用在本來就是可為 null 的 type 上. 反而 native type 卻不能
    • f***K says: 但這 "不能" 其實也不是 Optional 的問題, 這是語言的問題
    • n****e :: freak: 我的看法是:因為是reference本身沒有non-optional,而不是type,這是語言上限制了你要存取一個object必定要透過reference表示所導致的,可是type本身並不受到這點限制而且也不能表示這點(所以才有1那個問題XD)。 至於native type.....就當他是java語言裡的異類吧(遠目)
    • f***K says: 我的看法不太一樣, 既然所有的 Java reference 都可 null, regardless of types. 或許從 type system 的角度來看可以這樣解讀 - 所有 Java 的 user-defined type 都具有 optional 語義
    • f***K says: 當然我理解 (腦補) 你說的 type system 之於 object, 但 Java 只能透過 reference 才能存取 object, 因此在這裡我沒有特別區隔兩者
    • e*****q says: Stackoverflow 上的這篇的二樓有不錯的推論與解釋 Should I use Java8/Guava Optional for every method t... ,最後引用 Guava 一篇文章裡的話收尾,大意是除了增加可讀性,最大的好處是可以避免被誤用。
    • f***K says: "It forces you to actively think about the absent case" 覺得說服力還是不夠 @@ 我的 comment 是, 由於 Java 所有 reference 都可為 null, 看到 reference 就要考慮 null
    • n****e :: 1. <K, Optional<V>> Optional<V> Map.get(K key)讓我們可以三個願望一次滿足,像健達出奇蛋一樣
      2. java對null reference的語言支援根本就只有 !=/== null,跟沒有沒兩樣XD,於是大家想弄個方便點的optional語法能把事情丟給compiler就盡量丟
      我能想到比較有說服力的大概只有這兩點,其他說法我覺得正反兩方都很有道理(逃
    • s*****g :: 對, java 的 null 這是不可避免的核心設計, 甚至 Optional 的實作就可以只是拿一個普通的 object reference. 我覺得用 Optional 最主要的就是要用上面所說的那個 pattern (map, flatMap, filter, etc 等把東西串起來)
    • s*****g :: 所以這就是 Optional 有而普通的 object reference 沒有的東西: pattern. 當我們希望把 if (.. != null) 這種判斷封裝起來, 又不改變語言本身(e.g. 加入語法醣支援 optional chaining)的話就成了 Optional
    • s*****g :: 要加上 mandatory 變成要改變語言本身很多(否則該 mandatory 物件本身也可能是 null). Optional 也可能是 null, 這只能靠形成一個 idiom 盡量避開
    • s*****g :: 所以最後那個 quote 對我來說重要的句子是這一句, "you have to actively unwrap the Optional and address that case". 當我們要寫某一段 "必須判斷是否為 null, 否則做處理" 的程式時, 就用 Optional 包起來, 或說可以使用這個 pattern
    • 戩*姜 :: 勉強有點關聯 https://www.facebook.com/zonble/posts/10152665339233185
    • s*****g :: 看不到XD
    • 戩*姜 :: 那換成這個:Swift

沒有留言:

張貼留言

2019-07-30

e***q says:無條件支持「看到更多吉賽兒 aka 國民老婆 aka 蓋兒加朵 (Gal Gadot) 與韓的玩命情侶走天涯電影」 真心覺得這個更有賣點! 6 年過去了我們還在等!給《玩命關頭》韓哥一個公道,戴克蕭不用踹共嗎? – 電影神搜 #JusticeForHan e...