java monad是什么,讓我們一起了解一下?
Monad是一個代碼名字,意思是單子代表Windows上的一個新的交互式命令行工具以及面向對象的腳本技術。Monad也被稱為MSH,是下一代的Windows命令shell,用全新的角度來完成各式各樣的管理任務。
Monad定義的要素有哪些?
在定義 Monad 時需要提供一個類型構造器 M 和兩個操作 unit 和 bind:
1、類型構造器的作用是從底層的類型中創建出一元類型(monadic type)。如果 M 是 Monad 的名稱,而 t 是數據類型,則 M t 是對應的一元類型。
2、unit 操作把一個普通值 t 通過類型構造器封裝在一個容器中,所產生的值的類型是 M t。unit 操作也稱為 return 操作。return 操作的名稱來源于 Haskell。不過由于 return 在很多編程語言中是保留關鍵詞,用 unit 做名稱更為合適。
3、bind 操作的類型聲明是 (M t)→(t→M u)→(M u)。該操作接受類型為 M t 的值和類型為 t → M u 的函數來對值進行轉換。在進行轉換時,bind 操作把原始值從容器中抽取出來,再應用給定的函數進行轉換。函數的返回值是一個新的容器值 M u,M u 可以作為下一次轉換的起點。多個 bind 操作可以級聯起來,形成處理流水線。
具體代碼示例如下:
public?class?LoggingMonad?{ ? ?private?final?T?value; ?private?final?List?logs; ? ?public?LoggingMonad(T?value,?List?logs)?{ ?this.value?=?value; ?this.logs?=?logs; ?} ? ?@Override ?public?String?toString()?{ ?return?"LoggingMonad{"?+ ?"value="?+?value?+ ?",?logs="?+?logs?+ ?'}'; ?} ? ?public?static??LoggingMonad?unit(T?value)?{ ?return?new?LoggingMonad<>(value,?List.of()); ?} ? ?public?static??LoggingMonad?bind(LoggingMonad?input, ?Function?transform)?{ ?final?LoggingMonad?result?=?transform.apply(input.value); ?List?logs?=?new?ArrayList<>(input.logs); ?logs.addAll(result.logs); ?return?new?LoggingMonad<>(result.value,?logs); ?} ? ?public?static??LoggingMonad?pipeline(LoggingMonad?monad, ?List >?transforms)?{ ?LoggingMonad?result?=?monad; ?for?(Function ?transform?:?transforms)?{ ?result?=?bind(result,?transform); ?} ?return?result; ?} ? ?public?static?void?main(String[]?args)?{ ?Function ?transform1?= ?v?->?new?LoggingMonad<>(v?*?4,?List.of(v?+?"?*?4")); ?Function ?transform2?= ?v?->?new?LoggingMonad<>(v?/?2,?List.of(v?+?"?/?2")); ?final?LoggingMonad?result?=? pipeline(LoggingMonad.unit(8), ?List.of(transform1,?transform2)); ?System.out.println(result);?//?輸出為?LoggingMonad{value=16,? logs=[8?*?4,?32?/?2]} ?} }
以上就是小編今天的分享了,希望可以幫助到大家。