4.1 定義済み関数

(1/1)
関数
JavaScriptには、よく使う処理を手続き(プロシージャ)としてまとめる関数という仕組みが備わっている。あらかじめJavaScriptに備わっているものを定義済み関数と呼び、parseIntparseFloat などがある。三角関数や指数関数といった数学的関数はMathオブジェクトのメソッドとして用意されている。

目次

サンプル・プログラム

定義済み関数 parseInt

3.1 if~else文」でうるう年を求めるプログラム "ifElse2.html" を作ったが、このとき、キーボードから入力したテキストを整数(西暦年)に変換するのに、parseInt という定義済み関数を使った。

  25:     let year = document.getElementById('year').value;   //西暦年
  26:     year = parseInt(year, 10);                          //10進整数化

関数とは、数学で習った一次関数  mimetex 、二次間数  mimetex 、三角関数  mimetex 、指数関数  mimetex  と同じ概念だ。数学的関数だけでなく、よく使う処理(式と制御文の集合)を手続き(プロシージャ)としてまとめたものが関数である。
何らかの値  mimetex  を与えると、決まったルールに則り演算し、結果を返すもので、一般的に  mimetex  と書く。
プログラミングでは、与える値  mimetex  を引数 (ひきすう) 、 mimetex  の結果値を戻り値 (もどりち) または返り値 (かえりち) と呼ぶ。

parseInt はJavaScript処理系に用意された定義済み関数で、parseInt(str, radix) のようにして使う。引数はstrとradixの2つで、テキストstrを基数radixの整数(radix進数)とみなし、整数に変換した結果(Number型)を返す。
引数radixは省略可能で、省略時には次のルールに則り変換を行う。
  1. 入力した string が "0x" または "0X" (ゼロに続いて小文字または大文字の X) で始まった場合は、radix を 16 と仮定し、残りの文字列が 16進数として解釈する。
  2. 入力した string が "0" (ゼロ) で始まった場合は、radix は 8 (8進数) または 10 (10進数) と仮定する。厳密にどちらの基数が選択されるかは実装に依存する。ECMAScript 5 では 10 (10進数) を使用するべきだと明示しているが、すべてのブラウザーが対応しているわけではない。したがって、parseInt関数を使うときは radix を常に指定すべきだ。
  3. 入力した string がその他の値で始まるときは、基数は 10 (10進数) となる。

関数とメソッド

JavaScriptには、parseInt 以外にも、引数を浮動小数に変換する parseFloat、引数をが非数かどうかを判定する isNan などの組み込み関数があるが、他のプログラミング言語に比べて関数の種類が少ない。

数学で習った三角関数は、Math.sinMath.cosMath.tan として用意されている。これらは、Math オブジェクトのメソッドであり、関数とは少し意味合いが異なる。指数関数や対数関数などの数学関数は、そのほとんどがMathオブジェクトのメソッドとして用意されている。
オブジェクトやメソッドについては、章を改めて説明する。

コラム:手続き型言語とオブジェクト指向型言語

Java
複数の式や制御文をひとまとまりの手続き(プロシージャ)としてモジュール化できるプログラミング言語を手続き型言語を呼ぶ。プロシージャは、JavaScriptやC、C++、BASIC、FORTRAN、PHP、Pythonでは関数と呼ぶ。BASICやFORTRANでは、関数とは別にサブルーチンと呼ぶプロシージャが用意されている。メソッドもプロシージャの一種である。

プロシージャがメソッドでしか現れないC#やJavaはオブジェクト指向型言語と呼ぶ。JavaJavaScript に名前が似ているが、まったくの別物である。
オブジェクト指向型言語手続き型言語の間に優劣はない。数学の方程式で表せるような問題(例:天体の位置計算)をプログラミングするなら手続き型言語の方が短く書けるし、さまざまな種類のデータを取り扱うのであればオブジェクト指向型言語の方が適している。
(この項おわり)
header