JavaScript配列の空要素の話

gfx.hatenablog.com

配列の空要素の問題ですね。容量は確保されてるが値が(undefinedさえも)入っていない状態。

$ node -p -e "new Array(3)"
[ <3 empty items> ]

この配列のlengthは3になるのだが、forEachなどのイテレーション関数では空要素は列挙されない。

$ node -p -e "new Array(3).length"
3
$ node -e "new Array(3).forEach(i => console.log(i))"    # 何も出力されない

リンク先ではArray.fromやスプレッド演算子を使って、undefinedをセットするコードが紹介されているが、自分はこういうときはfillを使っている。

$ node -p -e "new Array(2).fill()"
[ undefined, undefined ]

0 から 9 の値が入った配列をさくっと作りたいときは

$ node -p -e "new Array(10).fill().map((_, i) => i)"
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

左から右へ流れるようにチェインできるのがfillを使う場合の利点

ちなみに空要素はlengthプロパティを変更しても作れる

$ node
> const a = [];
undefined
> a.length = 5
5
> a
[ <5 empty items> ]
$ node
> const a = [1,2,3,4,5];
undefined
> a.length = 2;
2
> a.length = 5;
5
> a
[ 1, 2, <3 empty items> ]

ニンテンドーラボの懸念点

ゼルダを筆頭に高品質なコンピュータゲームをリリースしながら、なおアナログとの融合を狙ってくるあたり任天堂は他のゲーム会社とは一線を画していますねー。あの会社には遊びは身体性を抜きに生まれないとかそんな感じの開発の哲学でもあるんでしょうかね?

なかなか面白そうな試みではあるのですが、一つ懸念があります。それはインターネッツの人々が大絶賛している事。

リリース前にネットで絶賛されてる商品やサービスって、リリース後には鳴かず飛ばず、あーなんかそんなの話題になったねー、ぐらいの扱いになる事が多々あります。ネットが高評価一色でかえって不安になります。むしろ"ニンテンドーラボが流行らない10の理由"なんてタイトルのくそ記事がアップされるぐらいの方がかえって当たりそうな気がしますよ。

あーいう絶賛している新し物好きのアーリーアダプターな人たち、そもそも彼らはニンテンドーラボのターゲット層ではないんですよね。親として子供に買い与えることはあっても、任天堂があれで遊んで欲しいと思ってるのは子供たち。親が絶賛したからといっても子供達の間で流行るわけではないし、自分が子供の頃を思い出すと親が絶賛していたモノなんて別に子供にとっては面白くないんですよね。親世代の絶賛なんて逆に不安要素ですよ。

まあ、結局のところ手にとって遊んでみない事にはわかんないですけどね。自分は子供が興味持つようなら買って遊ばせてもいいかなぁとは思います。子供いないけど