10. 関数
関数は処理を一纏めにしたものです。
関数の定義方法と呼び出し方は以下です。
// 関数の定義
function 関数名(引数) {
処理
return 戻り値;
}
// 関数の呼び出し
関数名(引数);
// 戻り値を受け取りたい場合は
戻り値を保存させたい変数 = 関数名(引数);
関数名
定義で付けた名前を呼び出しの時に使用します。
引数
関数に渡す値です。
カンマで区切る事で、複数の引数を指定できます。引数が必要ない場合は省略できます。
カンマで区切る事で、複数の引数を指定できます。引数が必要ない場合は省略できます。
処理
関数が呼び出された時、ここに記述された処理が実行されます。
戻り値
return 戻り値; と記述すると、そこで関数の処理を終了し、戻り値に指定された値を返します。
戻り値は「OK」や「100」などの固定の値や変数、計算式や関数も指定する事もできます。
計算式を指定した場合は計算結果が返され、関数を指定した場合はその関数の戻り値が返されます。
戻り値は「OK」や「100」などの固定の値や変数、計算式や関数も指定する事もできます。
計算式を指定した場合は計算結果が返され、関数を指定した場合はその関数の戻り値が返されます。
では以下のサンプルを「SampleJS.html」に記述して実行してみましょう。
/*
* ベースとなる料理と加える食材を引数で与えると、完成した料理を文字列で返します。
*
* 引数1:mainDish ... ベースとなる料理名
* 引数2,3:food1, food2 ... 加える食材名
* 戻り値:完成した料理の文字列
*/
function cooking(mainDish, food1, food2) {
var mainMenu = workmanship(mainDish);
var arrangeMenu = arrange(food1, food2);
return mainMenu.tasteLevel + arrangeMenu + mainMenu.name;
}
/*
* ベースとなる料理と加える食材を引数で与えると、完成した料理を文字列で返します。
*
* 引数1:mainDish ... ベースとなる料理名
* 戻り値:料理名と出来栄えの文字列をプロパティに持つオブジェクト
*/
function workmanship(mainDish) {
var workmanshipData = {
name : mainDish,
tasteLevel : Math.floor(Math.random() * 100 + 1) // 料理の点数を1~100点でランダム生成
};
// 料理の点数に応じた文字列で上書きする
if (workmanshipData.tasteLevel > 95) {
workmanshipData.tasteLevel = "至高の";
}
else if (workmanshipData.tasteLevel > 80) {
workmanshipData.tasteLevel = "ほっぺたの落ちる";
}
else if (workmanshipData.tasteLevel > 60) {
workmanshipData.tasteLevel = "おいしい";
}
else if (workmanshipData.tasteLevel > 30) {
workmanshipData.tasteLevel = "普通の";
}
else if (workmanshipData.tasteLevel > 15) {
workmanshipData.tasteLevel = "微妙な";
}
else if (workmanshipData.tasteLevel > 5) {
workmanshipData.tasteLevel = "異臭のする";
}
else {
workmanshipData.tasteLevel = "炭化した";
}
// 料理の名前と評価を持ったオブジェクトを返す
return workmanshipData;
}
/*
* 加える食材の種類と個数に応じてアレンジの文字列を返します。
*
* 引数1,2:food1, food2 ... 加える食材名
* 戻り値:アレンジの文字列
*/
function arrange(food1, food2) {
// 使える食材をジャンル毎に配列に代入する
var vegetables = [
"にんじん",
"じゃがいも",
"たまねぎ"
];
var meats = [
"牛肉",
"豚肉",
"鶏肉"
];
// 使える食材のジャンル別の個数を数える変数
var vegetablesCount = 0;
var meatsCount = 0;
// for文用
var i;
// 野菜の数チェック
for (i = 0; i < vegetables.length; i++) {
if (vegetables[i] == food1) {
vegetablesCount++;
}
if (vegetables[i] == food2) {
vegetablesCount++;
}
}
// お肉の数チェック
for (i = 0; i < meats.length; i++) {
if (meats[i] == food1) {
meatsCount++;
}
if (meats[i] == food2) {
meatsCount++;
}
}
// 食材の配分で料理名を決める
if (vegetablesCount == 2) {
return "野菜たっぷり";
}
else if (meatsCount == 2) {
return "お肉たっぷり";
}
else if (vegetablesCount == 1 && meatsCount == 1) {
return "野菜とお肉の";
}
else if (vegetablesCount == 1) {
return "野菜";
}
else if (meatsCount == 1) {
return "お肉";
}
else {
return "得体の知れない";
}
alert("return されているので、ここは実行されません。");
}
// cooking関数を呼び出す
var itadakimasu = cooking("カレーライス", "たまねぎ", "牛肉");
alert(itadakimasu);
他の食材を扱えるように引数を増やしてみたり、新しく値段を決める関数を作るなど、書き換えながら動作を確認してみましょう。
This software includes the work that is distributed in the Apache License 2.0
Last modified: Tuesday, 8 May 2018, 9:50 AM