ブログの記事を作成するツールとかを書いてて記事を公開するのがめちゃくちゃ遅くなってしまった…すみません
TypeScriptでRustlyな書き方ができるのパッケージって色々あると思うんだけど、自分はmonadsがかなり気に入ってる。オススメhttps://t.co/O4wjIHFUMC
— こまもか🦊 (@Comamoca_) August 22, 2023
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 でも使える便利系ライブラリをまとめてたりするのでこの記事が気に入った人は読んでくれるとうれしい限り。