見出し画像

予習編その2「繰り返し」:ノンプロ研初心者向けプログラミング講座 Vol.2 【GASコース第9期】

↓の続きです。

これまでのあらすじ

メロスは激怒した。必ず、かの邪智暴虐のエラーを除かなければならぬと決意した。メロスにはGASがわからぬ。メロスは、村の会社員である。笛を吹き、猫と遊んで暮して来た。けれども効率化に対しては、人一倍に敏感であった。きょう未明メロスは村を出発し、野を越え山越え、十里はなれた此のノンプロの市にやって来た。

スライド37枚目、繰り返しから続きの予習。

2.繰り返し

プログラムの手続き
順次、選択、反復といった種類、区分けになる。
constしてcosole.logで出力というのは単純な順次になる。
if/switchは選択。
そして、ここで新たに反復処理をどうこうしようという肚だ。

決まった回数の繰り返し
繰り返し、といっても永遠に繰り返すのではなく、一定の回数で終えることができる。

for文による繰り返し
for文は初めて見たとき、作ろうとしたときは、初期化式; 条件式; 増減式に戸惑った。いまも参照しつつコード書く感じ。どうもうまく理解できていない。

i:カウント用変数 としているのが一般的だが「なぜループカウンタ変数のほとんどに “i”が使用されるのか?」として下記の記事が面白かった。

あくまで変数名にiやjを使うのは、慣習に過ぎない。ゆえに、iではなく、わかりやすく命名すべきとする派閥もあるようである。iとjが見分けづらいというのも分からないでもない。そのような話をしていたページを見かけたのだが、いま探したらパッと見つからなかった。このあたりに特にこだわりがあるわけではないので、いまは慣習にしたがってiを使っていく。

演習2-09 for文

スクリプト動作を確認する。

for(let i = 1; i <= 10; i++) {
     console.log(i);
 }

それぞれを見てみる。


let i = 1 初期化式 
これはiという変数の初期値、スタートの値を1としている。


 i <= 10; 条件式 
変数iは10以下であるという範囲、条件を示す。

i++  増減式 
ここが少しわかりにくい。ループしていくときに、ループ1回目の最初は変数の値は1になり、ループ2回目はiに1足した数となる、というの合っているかな。この場合は
ループ1回目 i=1
ループ2回目 処理開始時はi=1なので「i++」に,よって、 i=i+1 , 1=1+1になる?あれー、でもな、そうすると、1回目の+1はなし?ちょっと落ち着こう。

++はインクリメントという。
演算対象となる変数の値自体を変更するという特性があるそうです。
文字面だけ読んでもうまく把握は難しい。
++は x=x+1 ということになる。+1がポイントか。

前置きと後置きで値を返すタイミングが異なるらしい。

for(let i = 1; i <= 10; i++)とfor(let i = 1; i <= 10; ++i)では結果は変わらない。

i+++にしたらどうなるかとやってみたら、syntax errorだった。

スライドとあわせてGAS本100ページ目あたりを参照しつつ、インクリメントとデクリメントを試す。いったん、ここではforを脇に置く。

画像1

最初は変数としてx=1,y=10 と置いて(let)いたところ、なんらかの事情でそれを増やしたり、減らしたり、というができるのは分かった。
-1ではいけないのか?とかそのへんはよくわからない。


画像2

前置きと後置きの違い。上から、左から処理していく流れ。

ん~~~~ちっとまだよくわかってないけど次行こ。

演習2-09:調べたり書いたりで20~30分くらいか。


演習2-10

1から任意の整数xまでの整数を1+2+…と順番に加算した結果を、「1から●まで加算するとXXです。」とログ出力するスクリプトを作成してみましょう。例:x=10
ログ出力「1から10まで加算すると55です。」

お題のスクリプトを作る。あ~~数学的な考え方が弱いな~~~式の組み立てがどうもだめだ。

for(let i = 1; i <= 10; ++i) {
     console.log(i);
 }

先ほどの演習2-09ではこうだった。これだと、ログに1~10までがずら~っと並ぶわけ。これを全部足したやつを表示したいわけ。どうすんのよ?

「1から●まで加算するとXXです。」これはテンプレート文字列でいいでしょう、で、どうやって計算するのかですよ。

試しに

function myFunction2_10()  {
 for (let i = 1; i <= 10; ++i) {
 }
 console.log(i);
}

と、console.log(i)の位置を変えてみたら、ReferenceError: i is not definedだった。ブロックの外だから、iの定義がない。

用事があったので少し出掛けた。歩きながら、そういえば昨日、階数のことを調べていて、ターゲットの数字からマイナスしていくというのがあった。また、1+nの和の公式を頼りにしつつ、これで上手くできるのではないかと思い至った。どうやって書くんだ?しばらく試してみて上手くいかなったので、一旦保留。

結局、ググって調べたやつを参考にしつつ、なんとか形になった。

コードを書くより、考えたり、定式化?するのに時間がかかる。
演習2-10:調べたり書いたりで20~30分くらいか。

演習2-11 while文とデクリメント演算子(説明)

この演習はちょっとしたトラップだな!無限ループに陥る恐怖。

while文による繰り返し
while (条件式){
// 処理
}
条件式がtrueの間、繰り返しをする


続く。

いいなと思ったら応援しよう!

good-sun(a03)
いただいたサポートで、書籍代や勉強費用にしたり、美味しいもの食べたりします!