【GAS基礎編22】基本を覚える_関数
おはようございます!MARIEです(`・ω・´)ゞ
宿題の答え合わせ
前回出題した宿題は無事に完了しましたでしょうか?
宿題は以下でした。
undefined, nullについては、この記事がかなり詳しく説明をしていますので、これを読む。
答え合わせというより、ちゃんと読んだか読まなかったかと報告しあう会ですねこれは(笑)私はちゃんと読みました!!神に誓います。
今全てを把握する必要性は無いと思うので、いろいろなところから情報を取得しに行くということが大切だという意図の宿題でした。
関数について
それでは、今日は関数について学んでいきましょう!
関数については、最初から当たり前のように使っていましたよね。
function 関数名() {
// 処理
}
「関数」とは「function」のことです。{ から }までがその関数のことを指します。これはなんとなく今までやってきたことなのでわかると思います。
今日はその関数についてさらに深掘りをしていきましょう。
早速以下の関数が複数あるパターンのプログラムを書いて実行をしてみましょう。
function sayTest() {
sayGoodBye();
console.log('say good morning!')
}
function sayGoodBye() {
sayHello();
console.log('Good Bye!');
}
function sayHello() {
console.log('Hello!');
}
結果はこうなりました。
つまりどういうことか。プログラムがどんな動きをしているのか。
function sayTest() { //1.sayTestの関数が呼び出される
sayGoodBye(); //2.sayGoodByeの関数に移動をする
console.log('say good morning!')
} //8.sayTestの関数に戻りsay good morning!が出力される
function sayGoodBye() { //3.sayGoodByeの関数が呼び出される
sayHello(); //4.sayHelloの関数に移動をする
console.log('Good Bye!'); //7.戻ってきてGood Bye!が出力される
}
function sayHello() { //5.sayHelloの関数が呼び出される
console.log('Hello!'); //6.Hello!が出力される
}
ちょっとよくわからないですよね。
少し実践的なプログラムを書いて、理解を深めていきましょうか。
経理の人が税込み価格を計算したい例
以下のプログラムを書いて実行をしてみましょう。
function keiri() {
const price = 1000;
const priceWithTax = calculateTax(price);
console.log(`${price}円の税込み価格は${priceWithTax}です`);
}
// 税抜き価格をもらって、税込み価格を返す
function calculateTax(price) {
const taxRate = 1.1; // 税率10%とする
return price * taxRate;
}
結果はこうなりました。
【引数と仮引数と戻り値】
function keiri() {
const price = 1000;
const priceWithTax = calculateTax(price); //関数に渡す値=実引数
console.log(`${price}円の税込み価格は${priceWithTax}です`);
}
// 税抜き価格をもらって、税込み価格を返す
function calculateTax(price) { //関数が受け取る引数=仮引数
const taxRate = 1.1; // 税率10%とする
return price * taxRate;
//関数が呼び出し元に返す値 (=戻り値)(例だと「price * taxRate」の計算結果がreturnされる)
}
また新しい言葉が出てきましたね。引数と仮引数と戻り値については、ググって意味を調べてみてくださいね。意味がわかったていで以下進めますね。
【上記プログラムの関数のイメージ】
function keiri() {
const price = 1000;
const priceWithTax = calculateTax(price);
console.log(`${price}円の税込み価格は${priceWithTax}です`);
}
「function keiri」(※名前は経理さんにしましょう)は、税抜き価格を持っているんだけど、自分で計算はできないから税込み金額を計算してくれる人に頼みたいみたいな感じです。
function calculateTax(price) {
const taxRate = 1.1;
return price * taxRate;
}
一方で「function calculateTax(price)」(※名前はやさ子)は、税金を計算してくれる優しい人。やさ子は税抜き価格を経理さんから貰ったあと、経理さんに税込み価格を返してあげるというスキルを持っています。
【つまり図にするとこういうこと】
関数を使って三角形の面積を求めるプログラムを書いてみよう!
さきほどの経理さんとやさ子のおかげで、少し理解は深まってきたと思います。では、覚えた理解をさらに深めるために、三角形の面積を求めるプログラムを書いてみましょう。
■やりたいこと
「底辺」と「高さ」の情報を持っている人(名前は三角君にしましょう)と、三角形の面積を計算してくれる人(名前は計算さんにしましょう)の関数を作る。
■面積を求めたい三角形が2つあるとします。
■三角君は、以下2つの情報を持っています。
①底辺:10 × 高さ:20
②底辺:30 × 高さ:40
※三角君は三角形の面積を出す計算が不得意です。
ちなみに余談ですが、三角君が三角形の面積を出す計算ができた場合のプログラムは以下となります。
function triangle() {
const base1 = 10;
const height1 = 20;
const area1 = base1 * height1 / 2;
console.log('1の面積=' + area1)
const base2 = 30;
const height2 = 40;
const area2 = base2 * height2 / 2;
console.log('2の面積=' + area2)
}
これでも結果を出力することは可能ですが、三角形の面積を計算するという処理は同じですよね。
以下、話は戻って・・・
■計算さんは、三角形の情報は持ってい入ませんが、三角形の面積を出すスキルを持ち合わせています。
つまり三角君と計算さんが力を合わせることで、三角形の面積を出力できるのはもちろんのころ、より効率的に面積を求めることができるのです。
実際のプログラムはこうです。
function triangleArea2() {
const area1 = calcTriangleArea(10, 20);
console.log('1の面積=' + area1);
const area2 = calcTriangleArea(30, 40);
console.log('2の面積=' + area2);
}
function calcTriangleArea(base, height) {
const area = base * height / 2;
return area;
}
結果はこうなりました。
【つまり図にするとこういうこと】
処理の内容が同じだった場合、このようなプログラムが書けると、めちゃめちゃ効率的!
仮に三角形が100個あったとしても、底辺と高さの情報を計算さんに渡せばいいだけ。この技を使わないとめちゃめちゃ大変なことになる(゚∀゚)
また、万が一三角形の面積を求める公式が変わった場合(底辺×高さ÷3 みたいな)であっても、プログラムの修正箇所は1か所で済むのです。
引数は配列やオブジェクトでもOK
以下のプログラムを書いて実行をしてみてください。
function superMarket() {
const shopping = {
fruit: 'バナナ',
money: 200
};
// 結果をチェックしてもらう
if (check(shopping)) {
console.log('高い');
} else {
console.log('安い');
}
}
function check(shopping) {
if (shopping.money >= 150) {
return true;
} else {
return false;
}
}
結果はこうなりました。
このように、引数は配列やオブジェクトでも対応可能です!
いかがでしたでしょうか。
もうGASの基礎編最終段階へ入ってきているので、本当難しいと感じている方もいらっしゃるのではないでしょうか。
私はめちゃめちゃ難しい(゚∀゚)大混乱中です(笑)
次回、今までのまとめを含めたテストを行う予定です。
テストもちゃんと解説をしながら行っていきたいと考えているので、大混乱中ながらも、一つずつ理解をしながらテストをクリアしていきたい所存でございます!
ということで、今日は宿題はありません。
次のテストに備えて、復習を行っておいてくださいm(_ _)m
ではまた次回、よろしくお願いいたします(`・ω・´)ゞ