【GAS基礎編15】基本を覚える_ループ_while文
おはようございます!MARIEです(`・ω・´)ゞ
宿題の答え合わせ
前回出題した宿題は無事に完了しましたでしょうか?
宿題は以下でした。
for文を使って九九の表を作成してください。
さっそく私はググりました(笑)
さっそく出来上がりのプログラムを見てみましょう!
function multiplicationTable() {
const sheet = SpreadsheetApp.getActiveSheet();
for (let i = 1; i < 10; i++) {
for (let j = 1; j < 10; j++) {
sheet.getRange(i, j).setValue(i * j);
}
}
}
結果はこうなりました。
無事にスプレットシートに九九表が出力されていました( `ー´)ノ
九九のプログラムで出てくる「getRange」や「setValue」は上記の記事が詳しく書いていそうです。(あとで見ておいてください)
また、私の感覚としてfor文は実践あるのみですね。もう少し色々勉強をしていきたいと思いました(゜-゜)
while文について
(for文もままならない中ではございますが)本日はループの「処理の繰り返し」で使われる構文のもう一つ、「while文」について学んでいきましょう!
「while文」とは、for文と同じように、処理を繰り返したい時に使うものですが、条件が成立している間だけ繰り返すという機能を持つ構文となります。
while(条件式) {
//繰り返したい処理
}
のように、whileの後に入る条件式がtrueである限り、ずっと繰り返しをするというものです。
では、実践的なもので見ていきましょう。
function loopWhile() {
let i = 1;
while (i <= 10) { //条件は、iが10以下の場合
console.log(i);
i++; //1回の処理が終わるごとにiに1を足し、10に達した時点で繰り返しが終わる
}
}
「i++;」がもし無かったら、i=1なので「i <= 10」は常にtrueになってしまうので、無限に処理が終わらなくなってしまうのです。
試しに「i++;」を消して実行プログラムの実行をしてみます。
あわわわわわわ(゚∀゚)あわわわわわわ・・・大変なことになってしもた(笑)
ビックリしてPCの電源を切りたいレベル・・・です。
1~10の整数を足すプログラムをwhile文で書いてみよう
気を取り直して、「1~10の整数を足すプログラムをwhile文で書いてみたい」なと思います。
function oneTenWhile() {
let number = 1; // 繰り返しの初期値のカウンターを決めます
let total = 0; // 合計値は最初は0とします
while (number <= 10) { //終了値は10以下という条件式を作ります
total = total + number; //total+カウンターという計算をします
number++; // 処理が終わるごとにnumberに1を足すと共に、条件が成立している間だけ繰り返すためにこれ(number++;)を付けます
}
console.log(`合計は ${total} です`);
}
解説も書いてみました。いかがでしょうか。「while」について理解できましたか?(私はもう一度この記事を読み直しておさらいしたいお気持ちです)
なお、forとwhileの違いは、for文は繰り返しの回数が決まっている場合です。一方でwhile文は繰り返しの回数が決まっておらず、条件を満たしている限り処理を繰り返したい場合によく用いられます。
今回の計算はforでもwhileでもどちらでも出せますが、やりたいプログラムによっては使い分けが必要そうですね。
ループを途中で中断させる方法_break
「while」はwhileの後に入る条件式がtrueである限り、ずっと繰り返しをするというものでしたね。
ループを途中で中断したい場合に使えるのが「break」です。
さっそく何かプログラムを書いて「break」の理解を深めていきましょう。
以下の「1~100までの数一つずつに10をかけた数を出力するプログラム」を書いて、実行をしてみてください。
function forBreak() {
for ( let i = 1; i <= 100; i++ ) {
console.log('計算: ' + (i * 10));
}
console.log('終了しました');
}
ログには100個の数字が出てきたと思います。
例えば、「500以上の結果は出力しないで、プログラムを終了したい」場合に使えるのが、「break」ということです。
それでは、「break」を使ったプログラムを書いてみようと思います。
function forBreak() {
for (let i = 1; i <= 100; i++) {
if (i * 10 >= 500) {
break; //breakを通るとforを抜け
}
console.log('結果:' + (i * 10));
} //ここまでがfor文になります
console.log('終了しました');
}
実行ログでは、500以上の結果が出てくるログは出力されませんでしたね。つまり「break」は、好きなところで処理を中断してループを抜け出すことができるということ。
「break」を通過した場合、それ以降の処理は中断しますよ!それが「break」というものです。
なんか「forやらifやらbreakやら」たくさん出てきましたね(笑)
振り返りをしながらゆっくり覚えていきましょうね(*´ω`*)
ループをスキップさせる方法_continue
また、新しいことを覚えなきゃいけないのかい(゜-゜)・・・
って嫌にならないでください。
ループに関してはあと「continue」だけです!
もう少しお付き合いください!オネガイオネガイオネガイm(_ _)m
少しだけくじけてきたので、お願いなので私と一緒に頑張ってください。
では気を取り直して。
以下の「結果が偶数の時は出力しないで奇数だけ出力するプログラム」を書いて、実行をしてみてください。
初期値を1、終了値を10,掛ける数は3としましょう。
function loopContinue() {
let result;
for ( let i = 1; i <= 10; i++ ) {
result = i * 3;
if ( result % 2 === 0 ) {
continue;
}
console.log('結果:' + result);
} // for文はここまで
console.log('終了しました');
}
結果は無事に奇数のみ出力することができました。。
解説してみたいと思います。
まず「%」ですが、「%」は割り算の余りを求めてくれます。(これ私理解するまで1時間くらいかかりました笑)
例えば、5個のみかんを2人で分けます。その場合、平等に分けるとしたら1人2個づつになりますよね。じゃあ余った数は何個?そう1個!
みたいな計算が「%」を使った剰余演算子ということです。
それを踏まえて、(result % 2 === 0) を見てみると、resultで計算された整数を2で割ったとき、余りの数は必ず1か0になり、余りが0の場合、つまり2で割り切れることとなり、偶数であることがわかります。
そして、先ほどのプログラムに戻ります。
function loopContinue() {
let result;
for ( let i = 1; i <= 10; i++ ) {
result = i * 3;
if ( result % 2 === 0 ) {
continue;
}
console.log('結果:' + result);
} // for文はここまで
console.log('終了しました');
}
for文の中に「continue」がありますよね。1回目の処理の途中で「continue」を通過した場合、残りの処理を飛ばして、2回目の処理が開始されるというのが、「continue」というものです。
つまり、(めっちゃつまりって言ってたらごめんなさい)
( result % 2 === 0 )に該当する場合は、2回目の処理にいってね、3・・・4・・・(ループ)回目の処理にいってねということ。
スキップしてどんどん飛ばしちゃってー的な。
だから結果がこうなったのですね(゜-゜)<ワカッテキタゾ♪
ということで、一旦ループについての基礎知識は終了です。
次の章ではループのテストを行う予定です。(゚∀゚)テスト!!
テストが無事に終わったら、ループの応用編に入りたいと思います!
ループという名の通り、なかなかループから抜け出せないですね。「continue」を使ってスキップしたい!というのは冗談で・・・
引き続きよろしくお願いいたします(`・ω・´)ゞ
次はテストを行うので宿題はありません!が不安な部分などはググったりしてテストに備えておいてください。
ではまた次回、よろしくお願いいたします!