何も知らんけどLodash使ってみる

はいどーもLodashニートです。
本日はJavaScriptのよさそうなライブラリLodashを見つけたので、それを試しに使ってみたいと思います。
以下のサイトが公式っぽいです。
https://lodash.com/

とりあえず使ってみる

まずは超基本的だと思われる、「配列の要素をいじいじ」してみようと思います。
注*大概の環境で動くような気がしますが、僕はRPGツクールMVでやってます。

0:20
1:40
2:70
3:88
4:100
5:10
6:12
7:14

はいこんな感じ。

こんなの別に生のJSでもできるけど?

上記のコードは例えば

こんな感じで書けますよね。
Lodashと何が違うのでしょうか。
それはズバリLodashは遅延評価する(らしい)ことです。
すなわち、以下のコードの時点ではまだ評価が行われません。

これだけでビビっとくる方はくるんじゃないでしょうか。
生のJSはfilterやmapをするたびに新しい配列を返しますが、おそらくLodashは評価した段階で一つだけ配列を生成します(たぶん)。

あとは生のJSには入っていない便利そうな関数が大量に組み込まれています(LINQでよく見るやつもあります)。
例えばzipを見てください。
https://lodash.com/docs/4.17.11#zip
これは配列を受け取り、その内容をzipするものです。
サンプルコードを引用するとこんな感じ。

注*要素数の違うものをzipした場合、足りないものはundefinedになるようです。

関数のカリー化もできる

Lodashを使うと関数のカリー化も簡単におこなえます。
例えば以下のような感じ。

カリー化していることがわかりますね。

また、関数同士の合成もおこなえるようです。

ツクールMVで何に使えるのか

で、ツクールMVだとどう使えるかを考えたのですが、配列の扱いが楽になること以外だと、ウーン……。
例えば1番目のメンバーの顔グラを変えたいとして、以下のようにカリー化をおこなうとします。

実際に使うときは

とかでいけるわけですね。

で、これ使いたいですか……?
いやー、かなり微妙じゃないでしょか。
しかもこれ、$gamePartyが初期化されてからじゃないと当然使えないため、そもそもが動かしにくいです。

もう少し改造する

アクターを受け取り、アクターの装備を変更する関数があるとします。

これをカリー化して、アクター1番の装備タイプ5番を変更するようにします。

あとは任意のタイミングでchangeActor1EquipByIdを呼ぶだけですね。
例えばchangeActor1EquipById(3);とか。
changeActor1EquipByIdは呼ぶたびにカリー化された関数を生成するため、$gameActorsの初期化タイミングに留意する必要はなくなります。
ただ呼ぶたびに新たな関数を作るので、そこが微妙っちゃ微妙かもしれません。

注*コアスクリプト内のchangeEquipByIdの仕様として、該当する装備を持っていない場合は単に無視されます。

顔グラを変えるバージョンならこうですかね。

これもsetActor1FaceImage(3);とかいう風に使えます。

終わりに

Lodash自体はとてもイケてそうなライブラリなのですが、どうもツクールMVといい感じに組み合わせる方法がわかりませんでした。
僕が慣れてないのもあるでしょうが、関数をどうこうするのは非常に難しい印象でした(特に合成)。
まあツクールMVのコアスクリプトは副作用を持っていたり、参照透過性がなかったりするものが多いので仕方ないかもしれません。
やっぱり配列やオブジェクトの処理くらいですかねえ……。
ウーーン。せっかくだから何かしたいですが、関数型プログラミングの知識自体足りてないので、もう少し要勉強ですねえ。

フォローする