その他

jsの「map」メソッドについて〜命名の気持ち考察〜

この記事は約3分で読めます。

はじめに

どうも、芝田です。
今回は、jsのメソッドでもTOP5に入るくらい有名であろうmapメソッドについて、
「なぜmapという名前なんだろう」
に対する考察です。
※mapメソッドの使い方についてはすでに記事が溢れているので、別の観点で書こうと思います。

過去にひろゆ○さんが言及したことでも有名な「写像」という言葉ですが、実はこの「写像」の英訳がmapなのです。
※正確にはmapを日本語訳したときに「写像」という言葉を充てた、という方が正しいかもしれませんが…。

つまり、mapメソッドは数学でいうところの「関数」のニュアンスであると捉えると理解が進む(人もいるのではないかな)と思い、記事にしてみました。

写像って…?

数学用語としての「関数」とほとんど同じものとして理解していただいて問題ないです。

「関数」と言ったときには考察対象が「数」であって、「写像」といったときにはもっと広いいろいろな対象を指します。

つまり

何かをなにかに対応させる規則

と理解していただけるといいかと思います。

mapメソッド

一応、mapメソッドについて公式のリンクを貼っておきます。詳細は省略します。

Array.prototype.map() - JavaScript | MDN
map() は Array インスタンスのメソッドで、与えられた関数を配列のすべての要素に対して呼び出し、その結果からなる新しい配列を生成します。

本題

今回は、公式から拝借し、一部改変した下記を考察対象とすることにします。

const array1 = [1,2,3,4];

// Pass a function to map
const map1 = array1.map(x => x * 2);
// Expected output:Array[2,4,6,8]

上記のjsのコードはmapメソッドの動作例としても非常にわかりやすいですよね。
※念の為補足しておくと、配列array1の各要素の内容を2倍にする、という内容です。

ところで、(かなり荒っぽいですが突然)上記を式で表すと\(y=2x\)と書けますよね。そして、このような対応のことを数学では「関数」と呼んでいました。

配列の各要素に対してある規則のもとに別の要素を生成するようなメソッドには、まさに「関数」という名前がピッタリだったと思います。しかし、関数という名前はプログラムの世界では、すでに別の意味の言葉で使ってしまっていますよね。

では、何か代わりの言葉でピッタリ来るものは無いでしょうか。

命名:mapに決定!

数学科を卒業してITエンジニアになる方は一定数います。そのため、関数とほとんど同じ意味を持つ写像という言葉を命名することは、自然なことだったようにも感じます。

map(写像)って命名に決定!

最後に

命名の気持ちを汲めたり、背景がわかったりすると理解がぐっと深まるときがあります。

今回もmapって写像って意味ね、とわかったときに理解が進んだように思いました。