• monadsが良かった話

    2023年8月24日

    ブログの記事を作成するツールとかを書いてて記事を公開するのがめちゃくちゃ遅くなってしまった...すみません

    Twitter で monads についてツイートしてみたら思いの外反響をもらったので記事にして紹介してみる。

    monads とは

    Deno/Node で動く Rust like な処理が使えるライブラリ。GitHub

    例えばおなじみの​Result()​を使ってみるとこんな感じ。

    import { Err, Ok, Result } from "@sniptt/monads";
    
    const inSumomo = (text: string): Result<number, string> => {
      const count = (text.match(/すもも/g) || []).length;
    
      if (count == 0) {
        return Err("Notthing すもも in text.");
      }
    
      return Ok(count);
    };
    
    const sumomo = "すもももももももものうち";
    const iroha = "いろはにほへとちりぬるを";
    
    console.log(inSumomo(sumomo).unwrapOr(""));
    console.log(inSumomo(iroha).unwrapOr(""));

    上のコードは文字中から​すもも​という文字列があったらその個数を確認し、無かったらエラー文を返す関数。 処理が成功したら​Ok()​失敗したら​Err()​を返して、​Result()​を受け取った際は​unwrapOr()​を使うことで取り出すことができる。

    もちろん monads にある機能は Result だけじゃなくて、他にも​Option<T>​や​Either<L, R>​などのインターフェースが実装されている。

    詳しい使い方とかはリポジトリやドキュメントが詳しいのでここでは割愛する。

    余談

    宣伝になってしまうのだけど、ここでDeno でも使える便利系ライブラリをまとめてたりするのでこの記事が気に入った人は読んでくれるとうれしい限り。


    ko-fi ☕GitHub Sponsors 🐙