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