最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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(的評論 (共 條)

分享到微博請遵守國家法律
逊克县| 潼关县| 琼海市| 深泽县| 剑川县| 大田县| 滦平县| 济源市| 永寿县| 翁牛特旗| 佛冈县| 育儿| 河曲县| 南康市| 江山市| 南汇区| 闻喜县| 泗洪县| 女性| 山西省| 桦甸市| 临海市| 乌兰察布市| 佛冈县| 盐池县| 葵青区| 彰化市| 喀喇| 鸡东县| 吉木乃县| 科技| 景东| 同仁县| 富宁县| 乳山市| 鸡西市| 镇江市| 巩留县| 华蓥市| 于都县| 宾川县|