10. 関数

関数は処理を一纏めにしたものです。
関数の定義方法と呼び出し方は以下です。

// 関数の定義
function 関数名(引数) {
    処理
    return 戻り値;
}
        
// 関数の呼び出し
関数名(引数);
        
// 戻り値を受け取りたい場合は
戻り値を保存させたい変数 = 関数名(引数);
関数名
定義で付けた名前を呼び出しの時に使用します。
引数
関数に渡す値です。
カンマで区切る事で、複数の引数を指定できます。引数が必要ない場合は省略できます。
処理
関数が呼び出された時、ここに記述された処理が実行されます。
戻り値
return 戻り値; と記述すると、そこで関数の処理を終了し、戻り値に指定された値を返します。
戻り値は「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

最終更新日時: 2018年 05月 8日(火曜日) 09:50