関数
関数の基本
数学における関数とは異なり、プログラミング言語における関数は、基本的には文のまとまりに名前を付けたものです。
次のプログラムを実行すると、こんにちは、世界!こんにちは、世界!
と表示されます。
// 関数を定義しておけば、
function greet() {
document.write("こんにちは、世界!");
}
// 後から何度も呼び出すことができます。
greet(); // こんにちは、世界!
greet(); // こんにちは、世界!
2 行目から 4 行目で関数を定義しています。
ここでは、{
と }
で囲まれた文のまとまりに greet
という名前を付けています。
7 行目と 8 行目で、関数 greet
を 2 回呼び出しています。
greet();
のように書くことで、関数を呼び出すことができます。
これにより、こんにちは、世界!
が 2 回表示されます。
確認問題
はじめまして。
と自己紹介をする関数 introduceSelf
を定義してください。
また、呼び出してください。
function introduceSelf() {
// ここに関数が行う処理を書いてください。
}
// ここで関数を呼び出してください。
解答例: 自己紹介
function introduceSelf() {
document.write("はじめまして。");
}
introduceSelf();
引数
関数の振る舞いを呼び出し時に変えるため、関数に引数を与えることができます。引数にはどんな値でも指定できます。
次のプログラムを実行すると、こんにちは、田中さん!こんにちは、鈴木さん!
と表示されます。
function greet(name) {
document.write("こんにちは、" + name + "さん!");
}
greet("田中"); // こんにちは、田中さん!
greet("鈴木"); // こんにちは、鈴木さん!
greet
関数には、name
という引数が定義されています。
greet("田中");
のようにして関数を呼び出すと、"田中"
という値が引数として指定されます。
この値は、関数内では name
という引数として扱われます。
関数の中では引数は変数のように振る舞うため、document.write("こんにちは、" + name + "さん!");
を実行すると、こんにちは、田中さん!
が表示されます。
確認問題
名前を表す引数 name
を受け取り、はじめまして。私の名前は〇〇です。
と自己紹介をする関数 introduceSelf
を定義してください。
また、引数に "田中"
を与えて呼び出してください。
function introduceSelf(name) {
// ここに関数が行う処理を書いてください。
}
// ここで関数を呼び出してください。
解答例: 自己紹介
function introduceSelf(name) {
document.write("はじめまして。私の名前は" + name + "です。");
}
introduceSelf("田中");
複数の引数
複数の引数を受け取る関数を定義することもできます。
次のプログラムを実行すると、おはよう、田中さん!こんにちは、鈴木さん!
と表示されます。
function greet(greetingMessage, name) {
document.write(greetingMessage + "、" + name + "さん!");
}
greet("おはよう", "田中");
greet("こんにちは", "鈴木");
greet("おはよう", "田中");
のようにして関数を呼び出すと、"おはよう"
が greetingMessage
という引数に、"田中"
が name
という引数にそれぞれ指定されます。
確認問題
name
と age
という引数を受け取り、はじめまして。私の名前は〇〇です。〇〇歳です。
と自己紹介 をする関数 introduceSelf
を定義してください。
また、引数に "田中"
と 12
を与えて呼び出してください。
// ここで関数を定義してください。
// ここで関数を呼び出してください。
解答例: 自己紹介
function introduceSelf(name, age) {
document.write(
"はじめまして。私の名前は" + name + "です。" + age + "歳です。",
);
}
introduceSelf("田中", 12);
戻り値
関数内から関数の呼び出し元に値を返すことができます。 また、この値を戻り値と呼びます。
次のプログラムを実行すると、1と2の和は3です。
と表示されます。
function add(a, b) {
let sum = a + b;
return sum;
}
let answer = add(1, 2);
document.write("1と2の和は" + answer + "です。"); // 1と2の和は3です。
return sum
のようにすることで、そこで関数の実行を停止し、関数の呼び出し元に変数 sum
の値を戻り値として返すことができます。そのため、add(1, 2)
のように関数を呼び出すと、引数 a
は 1
、引数 b
は 2
となり、sum
が 3
となるので、3
が戻り値となります。
このため、add(1, 2)
は戻り値として返ってきた 3
になり、この値が answer
に代入されます。
これにより、1と2の和は3です。
と表示されます。
確認問題
問題 1
先ほど作った関数 add
を 2 回呼び出して、1と2の和は3で、3と4の和は7です。
と表示してください。
function add(a, b) {
let sum = a + b;
return sum;
}
let answer1 = /* ここで関数を呼び出し、1と2の和を求めてください。 */;
let answer2 = /* ここで関数を呼び出し、3と4の和を求めてください。 */;
document.write("1と2の和は" + answer1 + "で、3と4の和は" + answer2 + "です。");
解答 例: 足し算ゲーム
function add(a, b) {
let sum = a + b;
return sum;
}
let answer1 = add(1, 2);
let answer2 = add(3, 4);
document.write("1と2の和は" + answer1 + "で、3と4の和は" + answer2 + "です。");
問題 2
引数 a
と b
をとり、その積を戻り値として返す関数 multiply
を定義してください。
また、引数に 3
と 4
を与えて呼び出してください。
function multiply(a, b) {
// ここに関数が行う処理を書いてください。
}
let answer = /* ここで関数を呼び出してください。 */;
document.write("3と4の積は" + answer + "です。");
解答例: 掛け算ゲーム
function multiply(a, b) {
let product = a * b;
return product;
}
let answer = multiply(3, 4);
document.write("3と4の積は" + answer + "です。");
演習問題
問題 1
あるテーマパークの入場料金は、12 歳未満なら 500 円、12 歳以上なら 1000 円です。
このテーマパークの入場料金を計算する関数を作ってみましょう。
年齢を表す引数 age
を受け取り、12
未満なら 500
、12
以上なら 1000
を戻り値として返す関数 calculateTicketPrice
を定義してください。
また、引数に 12
を与えて呼び出してください。
function calculateTicketPrice(age) {
if (/* ここに条件を書いてください。 */) {
return /* ここに12歳未満の料金を書いてください。 */;
} else {
return /* ここに12歳以上の料金を書いてください。 */;
}
}
document.write("入場料金は" + calculateTicketPrice(12) + "円です。");
解答例: 入場料金
function calculateTicketPrice(age) {
if (age < 12) {
return 500;
} else {
return 1000;
}
}
document.write("入場料金は" + calculateTicketPrice(12) + "円です。");
問題 2
ある携帯会社の携帯電話料金は、データ使用量が 5 GB 未満ならデータ使用量 × 600 円、5 GB 以上なら 3000 円です。
携帯電話料金を計算する関数を作ってみましょう。
データ使用量を表す引数 monthlyDataUsage
を受け取り、料金を戻り値として返す関数 calculateCost
を定義してください。
また、データ使用量が 3 GB の時の料金を計算してください。
function calculateCost(monthlyDataUsage) {
// ここに関数が行う処理を書いてください。
}
document.write("携帯電話料金は" + calculateCost(3) + "円です。");
解答例: 携帯電話料金
function calculateCost(monthlyDataUsage) {
if (monthlyDataUsage < 5) {
return monthlyDataUsage * 600;
} else {
return 3000;
}
}
document.write("携帯電話料金は" + calculateCost(3) + "円です。");