IQ99の私がIQ145の知人が作ったライブラリの紹介をするようです。

紹介しろと言われた気がしたので

このライブラリの作者は人間としてはあまり好かないが、技術者としては尊敬するので、彼の為にこの
「明らかに頭のいい人間が頭のいい人間の為に書いたKiller jQuery」
と思われるものを紹介する。

What's Losand?

johnny-shaman/losand: (losand). contribute algebraic functions on javascript

IQ145の人間が作ったライブラリをIQ99の人間が説明するのがバカバカしいのは承知しているが、
「シンプルにモナドを扱う」
ライブラリだと思う。

インストール

使うに当たってはとっても簡単。npmとかが入っていれば、

$ npm install losand

とか、

$ yarn install losand

とやった上で、Nodejsのコードで動かすには

const _ = require("losand")

とやっとく。

このコード記述でお察しの良い方には説明不要だと思うが、この _ にリクワイアしてる処理で、
「あ、jQuery臭い」
と思うだろう。それでいい。

なお、作者曰く
「なぜ _ かというと、ラムダ記号(λ)をASCIIコードでシンプルに書くにはというところで、_ が良いのでは」
とか何処かで聞いた。


なお、HTMLなどで使いたい場合には、

<script src="https://cdn.jsdelivr.net/npm/[email protected]/losand.js"></script>

と、ご丁寧にCDNで提供しているらしい。

使い方というか振る舞いの解説

join

_({a: 1}).join.a
//=> 1 が返ってくるらしい

_({a: 1})._.a
// これでも 1 が返ってくる

あるオブジェクトに対する値を取得するのに使う。

map

const t1 = {a: 1}
const t2 = {b: 2}

_(t1).map(Object.assign, t2)._
// t1 に t2 のキー・バリューを追加したt1が返ってくる?
t1.b
//=> 2が返ってくる。

うん? const って変更不可能では?

そう思って普通だ。じゃあ内部で何が行われているか見てみる。

losand/losand.dev.js at master · johnny-shaman/losand:

    aMap: {
      configurable: true,
      value (a) {
        return Array.prototype.concat.call(
          [],
          ...(
            this.foldL((p, c) => c.constructor === Function || p, false)
            ? this
            : a
          )
        .map(
          f => (
            this.foldL((p, c) => c.constructor === Function || p, false)
            ? a.map(f)
            : this.map(f)
          )
        ));
      }
    },

局所的にしか見ていない( foldL の処理を追ったりしていない)し、Javascriptもモナドもよく理解していないので理解出来ないが、おそらく、 「関数そのものを返してる」

なので、

const t1 = {a: 1}
const t2 = {b: 2}

_(t1).map(Object.assign, t2)._
// t1 に t2 のキー・バリューを追加したt1が返ってくる?
t1.b
//=> 2が返ってくる。

このコードも多分
_(t1) 関数単体は t1 を返すだけの関数だが、その関数に .b を加えることで、 t2b の値を呼び出している」 という解釈ができなくもない。

他にも魅力的な機能はあるように思うが、IQ99の私がこれの恩恵にあやかれる気はしない。

なので私は頭の悪い人間らしく、IQ145の彼が言うように、
「Mozillaの定義するダサい命名」
のメソッドを素直に使うことにしようと思った。

ここまで読んでも興味の湧いている奇特な方は、npmのパッケージのページを見たりすれば良いのではなかろうか。

losand - npm

結論

やっぱり天才の考えることはわからないわ。


まんじゅ(´ん`)@CoderDojo駄Mentor

CoderDojo Sapporo/Sapporo East の駄メンターです。 子どもたちにオープンソースソフトウェアの布教をしています。

Crieitはαバージョンで開発中です。進捗は公式Twitterアカウントをフォローして確認してください。 興味がある方は是非記事の投稿もお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか
関連記事

コメント