五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

Monad in Java(

2021-11-27 11:08 作者:友紀(jì)V-入OP  | 我要投稿


這種代碼無論是可讀性還是性能都是災(zāi)難,但是有趣 (以及研究價(jià)值)最重要!Just for fun :)


對Optional,其有兩個(gè)操作是主要的——map和flatmap。這兩個(gè)操作都是在當(dāng)前的值不為空的情況下才會(huì)執(zhí)行的。其中map對值普通的映射,而flatmap則將返回的Optional替換為當(dāng)前的Optional。如果讀者熟悉js的promise,可以認(rèn)為then方法同時(shí)包含了map和flatmap。

根據(jù)flatmap的特性,在Optional上,可以認(rèn)為其用于連接兩個(gè)可能“失敗”的操作——比如上面的getMaybe。

比如你要從身份證號獲得銀行卡號,再從銀行卡號獲得對應(yīng)的余額,假設(shè)兩次操作都是從一個(gè)哈希表中獲取,則每次都可能取得空值,即“失敗”,即這個(gè)身份證號沒有對應(yīng)的銀行卡號,這個(gè)銀行卡號沒有對應(yīng)的余額(?直接理解成掛失,凍結(jié)之類的情況吧w),這時(shí)候你就可以使用flatmap——在代碼邏輯中不需要關(guān)心兩個(gè)操作是否失敗便可以將其相連接。

從函數(shù)類型上來說會(huì)更加清晰,比如通過身份證號獲得銀行卡號,可以認(rèn)為這個(gè)操作的類型簽名為IdCard -> Optional<CreditCard>,通過銀行卡號獲得余額的操作為CreditCard -> Optional<Money>,這時(shí)候使用flatmap,我們就能夠組合這兩個(gè)操作,得到IdCard -> Optional<Money>,BINGO!

但是上面的代碼同樣存在一個(gè)問題——你容易預(yù)見組合后的操作的返回值是什么:如果身份證號和銀行卡號均存在,則返回余額;若其中一個(gè)不存在,則返回空值。但預(yù)見這操作過程中會(huì)輸出什么,或者說,這操作會(huì)對外界產(chǎn)生什么影響則是一個(gè)復(fù)雜問題。于是最簡單的解決方案是:在操作中不要引發(fā)副作用,不要進(jìn)行輸出等操作。操作要盡量"純"才好!

Monad in Java(的評論 (共 條)

分享到微博請遵守國家法律
宜都市| 杨浦区| 达拉特旗| 平昌县| 平江县| 广安市| 壤塘县| 恩施市| 高淳县| 搜索| 隆林| 峨山| 衡阳市| 灌南县| 游戏| 庐江县| 博客| 大名县| 乐昌市| 庆安县| 贡觉县| 池州市| 信丰县| 桓仁| 会昌县| 镇坪县| 南通市| 天全县| 广元市| 桦川县| 三河市| 邢台市| 怀柔区| 延边| 凭祥市| 邓州市| 出国| 临江市| 资源县| 新田县| 叶城县|