LoginSignup
6
3

More than 5 years have passed since last update.

JavaScriptのsomeがanyって名前じゃなかったから探しにくかった話

Last updated at Posted at 2019-02-16

「JavaScript、mapと同時期に実装された、someとかeveryの知名度低いんじゃないかな?」

こんな感じのツイートを見かけました。

JavaScriptのsomeは「配列のメソッドで、引数で渡した条件を満たす要素が、少なくても一つは存在すればtrue、なければfalseを返す」です。

JavaScriptのeveryは「配列のメソッドで、引数で渡した条件を、全ての要素が満たしたらtrue、そうでなければfalseを返す」です。

このツイートを見つけたその日、「someメソッド」を探すのに手間取った私は、

「確かにそうかもなー。あと多分も名前がよくないよなー」

と思いました。


「配列(やそれに近いもの)で、引数で渡した条件を満たす要素が、少なくても一つは存在すればtrue、なければfalseを返す」というメソッドは、他の多くのプログラミング言語では、anyというメソッド名で存在します。

any以外にもありますが、こんな感じ。


私の一番好きな言語はC#です。JavaやKotlinでAndroidアプリも作ってました。まれにGroovyも使います。最近TypeScript・JavaScriptを仕事で使い始めました。

そんな私は、「JavaScriptのsomeメソッド」を見つけるのに手間取りました。理由は名前がanyじゃなかったからです。

他の言語でanyならば、多分JavaScriptにもanyなのかなーという予想が外れました。(実は、existscontainsは調べてた)

JavaScriptの「配列のメソッドで、引数で渡した条件を満たす要素が、少なくても一つは存在すればtrue、なければfalseを返す」なんで、anyじゃないんや!

(多分、歴史的な経緯で標準化の時にanyって名前は使えなかったとかかな?)


さて、

  • 複数のプロジェクトを掛け持ちしていて、プロジェクトごとに違う言語を使う人
  • 同じプロジェクトでも、部分部分で異なるプログラミング言語を使うと人

は少なくないと思います。

言語を切り替える際の頭の切り替え、大変ですよね。

各言語のコレクションライブラリは、射影・選択・数え上げ・グループ化など似たようなメソッドも多くがありますが、その実装方法・文化・流儀は異なります。そして、この投稿であげたanyallのように、言語ごとに似たようなメソッドでも名前が違います。

多くのプログラミング言語では、「射影はmap、選択はfilter」です。しかし、C#では「射影はSelect、選択はWhere」です。これには理由があり、LINQというC#の言語機能に由来します。理由はしっかりあって、SelectWhereという名前がSQL由来で覚えやすいという人も、なんでMapFilterじゃないんだという人もどちらもいると思います。

また、Java、Groovy、Scala、F#にcollectというメソッドがありますが、その仕様は全て異なります。


色々書きましたが、私の結論は

「コレクションライブラリ言語ごとに違って、大変だけれども、郷に入っては郷に従えだよね。大変だけれども」

です。

その言語を書いているときは、その言語の作法に従うのが良いと思っています。

正直、JavaScriptのsomeeveryは覚えるのが大変だけど、頑張って覚えようと思います。

多分、忘れるなー


PS

こんな事書いておいてあれですが、C# でSelectMapで、WhereFilterで呼び出すライブラリを作りました。

LinqAliasです!

よかったらみてね!!!

6
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3