JavaScriptの関数は「処理をまとめたもの」ではない!?を解説する

今回はJavaScriptにおいて、「関数とは何なのだろうか」について、解説します。関数について、よく聞くのが、「処理をまとめたもの」という説明です。これは本当に正しいのでしょうか?というのを僕が調査をして、このブログでまとめたいと思います。

今回のブログはこんな方におすすめ
  • プログラミングをある程度、勉強して関数をなんとなく使用している方
  • 関数とは「処理をまとめたもの」だと思っている方
  • 関数についての理解を深めたい方

関数とは処理をまとめたものであるという誤解

プログラムに関する多くの書籍や記事では、関数は「処理をまとめたもの」という説明がされていることが多いです。「処理をまとめたもの」という説明は間違っていはいないのですが、厳密には少し誤解を含んでいます。

では、プログラミングにおける関数とは厳密には何なのかということをここから解説します。

関数とはルールに従って受け取った値を別の値に変換するもの

結論からいうと、厳密には関数とは、ルールに従って受け取った値を別の値に変換するものです。

出典:wikipedia

プログラミングの関数の由来は数学の関数にあります。例えば、1次関数や2次関数などです。言葉だけでも覚えている方は多いのではないでしょうか?

1次関数を例に取ってみると、1次関数の公式はy = ax + b です。仮にa = 2, b = 1 の1次関数だとします。その場合、x = 1 の場合は y = 3 、 x = 2 の場合は y = 5 になります。

このように、x の値によって y の値が変化していきます。数学の場合は扱うものが数字なため、受け取った数字を別の数字に変換するものが関数です。そして、プログラムの場合は、扱うものがデータなため、受け取ったデータを別のデータに変換するものが関数になります。

関数を別のものに例えるなら自動販売機!?

関数をわかりやすく別のものに例えるなら”自動販売機”です。

自動販売機の機能をシンプルにまとめると、下記のようになります。

  1. お金を入れる
  2. 自動販売機が動作する
  3. 飲み物が出てくる

これを、プログラムの関数に置き換えると、、、

  1. 値を引数に入れる
  2. 関数が処理する
  3. 返り値がでる

以上になります。関数を「処理をまとめたもの」と覚えるよりは、後から覚え直す手間が省けるため、最初からコチラの覚え方で理解するほうがスムーズに学習が進むのではないかと思います。

引数や返り値のない関数

先程までの説明とは矛盾するのですが、引数や返り値のない関数も存在します。引数や返り値のない関数が存在することがJavaScriptにおいて、関数を「処理をまとめたもの」と説明する所以になります。

引数や返り値のない関数について説明します。

サブルーチン

古いプログラミング言語だと、返り値のない関数のことをサブルーチンと呼んでいました。そのため、関数とサブルーチンが区別されていました。しかし、いつしか関数とサブルーチンの区別をすることがなくなりました。

そのため、厳密には「処理をまとめたもの」という説明は関数ではなく、サブルーチンのことだったのです。実際にJavaScript以外の他の言語でいくと、C言語では、関数とサブルーチンの区別がされていません。

そして、JavaScriptではこのサブルーチンを関数として扱うにあたって、引数のない関数は undefined を引数として受け取る関数として、返り値のない関数は undefined を返す関数として扱います。

引数や返り値のない関数とは、 undefined を受け取り、undefined を返すことで、サブルーチンを関数として扱うものであると言う理解をするとJavaScriptにおける関数を深く理解することができると思います。

副作用

先程、引数や、返り値のない処理の塊のことをサブルーチンだといいました。そして、副作用とはサブルーチン内で行われる処理自体のことです。よりわかりやすく説明すると、関数が、値の変換以外の別の処理を副作用と呼びます。

たとえば、 console.log() でいうと、値をブラウザのコンソールに出力する処理のことを副作用と呼びます。

エンジニアとしてプログラムを設計するなど、高みをを目指す場合には副作用の理解が必要になってくるため、頭の片隅においておくと良いのではないかと思います。

まとめ

今回はJavaScriptの関数について解説しました。いかがでしたでしょうか?

  • 関数とはルールに従って受け取った値を別の値に変換するもの
  • 「処理をまとめたもの」という説明はサブルーチン
  • サブルーチン内で行われる値の変換以外の処理を副作用と呼ぶ

関数の概念を正しく理解するとプログラムに対する理解が深まって、よりプログラムへの理解が進むかと思います。この記事が皆さんの学習の役に立てば幸いです。


関連記事

この記事のハッシュタグに関連する記事が見つかりませんでした。

最新記事

カテゴリー

アーカイブ

ハッシュタグ