関数とは
関数とは・・・与えられた入力に対して処理を行い結果を変えす仕組みです。
抽象的なので具体的な例を挙げてみます。
自動販売機を想像してください。
自動販売機はお金を入れてボタンを押すと飲み物が出てきますね。
これは関数です。先に説明した文に当てはめると、
入力はお金です。自動販売機は押されたボタンの商品を取り出し口に送る処理を行います。返ってくる結果として取り出し口に飲み物を送り出します。
つまり自動販売機はお金を飲み物にする関数です。
OKですね。
実は関数というのは、これまでの授業でも何度か利用しています。
関数 | 入力 | 結果(返す物) |
parseInt() | 文字列 | 数値を返す |
上で記載したparseIntはJavascriptに元々組み込まれている関数なので組み込み関数と呼びます。
ユーザー定義関数
関数は自分でも作ることができます。
作り方は下記の通りです。
1 2 3 4 |
function 関数名(引数,...){ 処理 return 戻り値; } |
functionというのは関数を定義するときに使う決まり文句です。
- 関数名は作成する関数の名前です。
- 引数というのは関数を実施する際に必要なパラメータです。
先ほどの自動販売機で例えると「お金」になります。
複数指定可能です。 - returnは戻り値を返す命令文です。
戻り値というのは処理の結果をを表します。
自動販売機の例の場合は「飲み物」に相当します。
自動販売機の関数を書いてみます。
1 2 3 4 5 6 7 8 |
function 自動販売機 (お金){ もしお金が足りない場合。 何もしない。 もしお金が足りている場合場合 ボタンを光らせる ボタンが押されたらジュースを返す } } |
上のプログラムはテキトーに書いたので、全く動かないですが、
イメージは概ねこんな感じですね。
では、実際に動く簡単な関数から作ってみます。
まずは、金額を入れたら消費税込みの金額を返す関数を作ってみましょう。
1 2 3 4 |
function incTaxPrice(price){ var incTaxPrice = price * 1.08; return incTaxPrice; } |
関数作成できました!でもこれだけでは動きません。
処理、機能としては完成しています。
ただ、自動販売機もそこにあるだけで動くものではなく、
「ジュースを買う!」という動作が必要なように
実際に利用する場合は、作成した関数を使用する必要があるのです。
1 2 3 4 5 6 7 8 |
incTaxPrice(100) //関数呼び出し function incTaxPrice(price){ var incTaxPrice = price * 1.08; return incTaxPrice; } //108を返す |
いきなりですが、1行目で呼び出してますね!これで実行されます。
ここで疑問に思う人がいるかもしれません。
「プログラムは上から実行するはず。
関数作る前に関数を利用することができるのか?」
結果としては、問題ありません。関数作る前に実行できます。
なぜかというと、javascriptは実際の処理を実行する前にfunctionで宣言された関数を読み込むため利用することができます。
学校のテストを解くときに一回バーって全部の問題見てから解き始めますよね。そんなイメージです。関数がないかバーって見てあれば先に読み込んじゃう感じです。
次に関数を作るメリットについて考えてみます。
先ほど作った消費税の関数は計算が単純なため、関数のメリットが見えにくいです。ここで、関数の利点を感じるプログラムを書いてみましょう。
複数の三角形の面積の和を求めるプログラムを関数を使わずに
書いてみてください。
1つ目の三角形 | 2つ目の三角形 |
底辺:5 | 底辺:8 |
高さ:10 | 高さ:20 |
以前に習った配列とか使ってたら嬉しいですが、
まだ慣れてないかな。多分こんな感じで作ってるかなと思います。
1 2 3 4 5 6 7 8 9 |
var teihen1 = 5; var takasa1 = 8; var kekka1 = teihen * takasa / 2; var teihen2 = 10; var takasa2 = 20; var kekka2 = teihen * takasa / 2; kekka = kekka1 + kekka2; |
これを関数で書いた場合はこうなります。
1 2 3 4 5 6 |
kekka = calc(5,8) + calc(10,20) //関数で三角形の面積を求める function calc(teihen,takasa){ kekka = teihen * takasa / 2 return kekka } |
同じ処理を何度も書くことは、行数が多くなって後々読むのが大変になりますし、修正があった際に全ての処理を修正する必要があり、面倒になるので
共通の処理を何度も実施する場合は関数にするように意識しましょう。
では課題やって見ましょう。
課題
西暦を入れたらその年の干支を返す関数を作成してください。
宿題
入力した値までに含まれる素数を表示するプログラムを書いてください。
例えば10を入力した場合は(2, 3, 5, 7)
※素数・・・1 より大きい自然数で、 1 と自分自身のみでしか割れない数。