モナド...

まず、自分には、理解はいいから、使えればいい。

もっというと、モナドの考え方のMaybeとStateとOptionの3つの使い方がわかればそれでいい。

具体的には、

次の関数(nextAction)を実行する前に「nullでないか確認する」時に、Maybeクラスを使うようにする。

Java8では、Maybe.thenはOptional.flatMapに相当し、Maybe.Return.doNothingReturning?はOptional.ofNullableに相当するとのこと。

参考URL

http://the.igreque.info/posts/2016/04-monad-in-java.html

上記URLから抜粋すると とりあえず下記のメソッドのインタフェースを用意するらしい

下記は説明用のインタフェース、わかりやすくしているが、コンパイルはできないらしい

interface Monad<T1> {

  <T2> Monad<T2> then(Function<T1, Monad<T2>> action); 

  interface Return {
    <T> Monad<T> doNothingReturning(T value);
  }
}

Maybe

class Maybe<T1> implements Monad<T1> {
    private final T1 x; 

    Maybe(T1 x){
        this.x = x;
    } 

    public <T2> Maybe<T2> then(Function<T1, Maybe<T2>> nextAction){
        if (x != null){
            return nextAction.apply(x);
        } else {
            return new Maybe<>(null);
        }
    } 

    public static class Return implements Monad.Return {
        public <T> Maybe<T> doNothingReturning(T x){
            return new Maybe<>(x);
        }
    }
}

ちゃんとしてるらしいけど、こだわりのプログラムのサンプルコードの場所

https://github.com/highj/highj

わかりやすいサンプルコードの場所

https://github.com/igrep/monad-in-java-sample

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-04-25 (火) 10:58:48 (365d)