monadsが良かった話

読み終わるまでの目安 約2分

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

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でも使える便利系ライブラリをまとめてたりするのでこの記事が気に入った人は読んでくれるとうれしい限り。