「ノンプログラマーのためのスキルアップ研究会」通称ノンプロ研主催のAPIプログラミング講座【freee APIコース】の受講と並行して、同時多発開催されているノンプロ研講座の「GAS×freee APIコース」のTA(ティーチングアシスタント)を務めております。
この講座は
GAS初心者講座 全6回
freee APIコース 全4回
のコンバインド講座です。
かくいう私もノンプロ研で受けた最初の講座がGAS初心者講座でした。この最初のプログラミング学習をきっかけに実務でも使えるツールを自分で作れるようになり、お仕事でばりばり活用できています。
本日はノンプロ研 GAS初級 + freeeAPI講座第2期の第2回、制御構文です。#ノンプロ研 #GAS_freeeAPI講座 pic.twitter.com/ACF6VhRUdO
— 山口征啓@AI_QUEST2021 (@ID_HelpDesk) September 24, 2021
2日目は条件分岐と繰り返し
2日目の講座のテーマは条件分岐と繰り返しです。この2つのテクニックを学ぶとプログラミングらしい操作ができるようになります。
講座の中では、こうした制御構文がどういう風に動くかは理解できるけれども、なかなか実務で使うイメージが持ちづらいという感想がありました。
今回の補講記事では、実際に使う場面をイメージしながら復習をしていきたいと思います。
比較演算子
条件分岐に入る前にその細かい条件を設定するための比較演算子が重要になります。
x === y //等しい
x !== y //等しくない
x > y //より大きい
x >= y //以上
x < y //より小さい
x <= y //以下
なかで注意が必要なのは、「等しい」条件を示すときに使用する === です。=が2つでも動作しますが、この x == y 等の場合は厳密なデータ型の判定をしないので、思わぬエラーが発生する場合があるとのことで、基本的に === のデータ型を含めた一致を条件にすることが推奨されています。
この点は、私自身が初心者講座の受講していた時にも、直感的になかなか身につかなかったポイントで、よく比較演算子として = を1つだけ使ってしまい、エラーを出していました。
if文による条件分岐
if (条件式) {
// 処理
}
プログラミングを使うようになると、何度となくお目にかかるのが、このif文です。 条件式がTRUEかFALSEかで、以後の処理を分岐させることができます。
シンプルなif文は、実務だとこんな使い方が想定されます。
function sample001() {
const numSalesToday = 123465; // 取得した今日の売上のデータ(仮)
if (numSalesToday > 0) {
console.log(`今日は営業日でした。今日の売上は${numSalesToday}円でした。`);
}
}
これは、今日の売上を取得して、それが0円より大きい=営業していると判定して、営業日だけとある処理をすすめたい時に使えます。
if…else文でさらに複雑に分岐
if (条件式) {
// 処理1
} else {
// 処理2
}
if文にelse文を加えると条件式に当てはまらない時=FALSEの時の処理を指定できます。実務だとこんなイメージです。
function sample002() {
const numSalesToday = 0; // 取得した今日の売上のデータ(仮)
if (numSalesToday > 0) {
console.log(`今日は営業日でした。今日の売上は${numSalesToday}円でした。`);
} else {
console.log('今日はお休みです。');
}
}
sample001をベースに売上が0の時は、お休みのメッセージを出すようにしました。
真偽値への型変換
GASの条件分岐には、「値を条件式に指定すると暗黙的に真偽値に変換される」という特徴があるのですが、何の話かを理解するのは難しいですよね。
抑えておくポイントとしては、条件式が…
数値型:0とNaN(Not a Number)
文字列型:空文字=’’
その他:null と undefined
の場合、暗黙的(空気を読んで勝手)にFALSEになるということです。先程のsample002は以下のようにアレンジ可能です。
function sample003() {
const numSalesToday = 0; // 取得した今日の売上のデータ(仮)
if (numSalesToday) {
console.log(`今日は営業日でした。今日の売上は${numSalesToday}円でした。`);
} else {
console.log('今日はお休みです。');
}
}
numSalesTodayが0やNaNの場合は、条件式はFALSEになり、営業していないと想定してお休みのメッセージを出力しています。
if…else if文 でさらにさらに複雑に分岐
if (条件式A) {
// 処理1
} else if (条件式B) {
// 処理2
} else if (条件式C) {
// 処理3
…
} else {
// 処理XX
}
続いてelse if文を使って、さらに深淵な条件分岐の世界へダイブできます。これまでのサンプルスクリプトの例に来客数のデータを追加してさらに緻密に条件を判定してみた例が以下です。
function sample004() {
const numSalesToday = 0; // 取得した今日の売上のデータ(仮)
const numCustomer = 0; // 来客数(仮)
if (numSalesToday) {
console.log(`今日の来客数は${numCustomer}です。今日の売上は${numSalesToday}円でした。`);
} else if (numSalesToday === 0 && numCustomer) {
console.log(`今日の来客数は${numCustomer}です。残念ながら売上は${numSalesToday}円で、商談はまとまりませんでした。`);
} else if (numSalesToday && numCustomer === 0) {
console.log(`おかしいですね、来客数が${numCustomer}なのに${numSalesToday}円の売上が計上されています。`);
} else {
console.log('今日はお休みです。');
}
}
使い所に悩むけどバシッときまるとカッコいいswitch文
switch (式) {
case 値1:
// 処理1
break;
case 値2:
// 処理2
break;
…
default:
//処理default
}
条件分岐の最後に登場するのはswitch文です。スイッチの文字通り、境界があいまいでない条件分岐に適しています。
function sample005() {
const price = 1000;
const taxType = '軽減税率8%';
switch (taxType) {
case '軽減税率8%':
console.log(price * 1.08);
break;
case '標準税率10%':
console.log(price * 1.1);
break;
default:
console.log('対象外');
console.log(price);
}
}
消費税率は、そんなに種類がない上に境界条件がはっきりしているので、取得した消費税率の区分に応じて、税込み金額の計算式を切り替える処理をしているのが上記の例です。
とりあえず条件分岐までで、ひと区切り
自分自身が受講していた時の記憶はすっかり抜けておりますが、あらためて講座の内容と対峙すると、2日目にして結構ハードですね。一気に1回で補講記事をまとめられなかったので、取り急ぎ前半の条件分岐までで前編としてひと区切りします。