どうも。つじけ(tsujikenzo)です。2020年11月から始まりましたノンプロ研GAS初級講座7期ですが、このシリーズでは講座中では時間の都合でお伝えできなかったことなどを、全6回+おまけという感じでお届けしております。本日は2回目でございます。
前回のおさらい
前回はコンテナバインドからスクリプトエディタを開いてスクリプトファイルを表示して、簡単なログ主力を確認しました。演算や型についてもやりましたね。
DAY2補講
それではDAY2を振り返ります。
プログラムの手続き
プログラムの手続きには順次・選択・反復という3つの流れがありますが、Day2では選択(条件分岐)と反復について習います。
「順次」とはプログラムが上から一行ずつ実行されるということです。(このような処理を行う手続きを「インタープリター」と言います。)変数を定義する位置が、変数を呼び出す位置より後に書かれていてはエラーを起こしてしまいます。気をつけましょうね。
比較演算子
A > BはAの方が大きいですよ、ということでA大なり・・・と読みます。自分用メモ(いつも分からなくなる)ですw。<=や>=のようにイコールは常に右!です。寝る前に唱えましょう。
論理演算子のショートサーキット
読み方のおさらいをしておきましょう。
&&・・・アンパサンド(かつ)
||・・・パイプライン(または)
!・・・・エクスクラメーション(否定)
JavaScriptでは論理演算子の左辺は短絡評価(ショートサーキット)を行います。パイプラインの場合はまず左辺を評価し、falseの場合は右辺を返すという仕様です。
“` console.log(10 % 3 === 0 || ‘左辺はfalseだったようですね’); “`
(アンパサンドの場合は、左辺を評価してfalseだったら左辺を返すという仕様ですが、オブジェクトの要素がnullかどうかの判定で便利に使えますがここでは割愛させていただきます。 後述する暗黙の型変換を行っております。)
“` console.log(0 && “”); //0 “`
条件分岐
公式リファレンス
if文による条件分岐の公式リファレンスはこちらです。(if…elseの項を参照ください)
学習を始めた頃は公式リファレンスってとっても難しくてとっつきにくいものでしたが、慣れてくると本質というか正式なことが書いているので理解の深さを掘れたりします。
講座ではこのようにお伝えしました。
公式リファレンスも同じです。if文はまずconditionを評価することからスタートします。そして、評価の結果がtrueならstatement1を実行する、という流れです。
ワンライナー記法
ワンライナー(改行不要)で書く時はブロックを省略することができます。セミコロンが必要になるので忘れないように。
“` if (1 < 10) console.log('1は10より大きい'); //'1は10より大きい' ```
暗黙の型変換
条件分岐や制御構文の条件式、またはログ出力する際の丸カッコ()内など、様々な場面で暗黙の型変換が行われます。講座でお伝えしたのは暗黙の(真偽値への)型変換でした。
ログ出力と前回習った論理演算子で、暗黙の(真偽値への)型変換を体験してみましょう。
“` console.log(0);//0 console.log(!0);//true console.log(”); console.log(!”);//true “`
いかがでしょうか。数値型は値が0かNaNだとfalseを返しますが、それ以外の場合はtrueを返します。console.log()で0を否定!するとtrueが返っていますね。(ちなみにRubyでは0がtrueなのでプログラミング言語によって考え方が違うのも面白いですね。面白くない?💦)
繰り返し
for文も講座ではこのようにお伝えしました。
公式リファレンス
公式リファレンスを確認しておきましょう。
内容は同じですね。大事なのは、①initializationを1度だけ評価(初期化)する。②conditionを評価してstatementを実行する。③1回ループするごとにfinal-expressionを評価する。という流れになっていることです。3つそれぞれ評価(処理)をしていますので、ステートメントの終わりを表すセミコロン;で区切られているのがなんとなく理解できますでしょうか。
このfor文の流れを1つずつ箇条書きにすると、、、楽しいです。機会があったら一度ゆっくりと絵にかいたり矢印を書いたりして取り組んでみてください。while文も同様です。
文中の「conditionは省略可能、常にtrueに評価する」というのは下記のように無限ループしてしまうけどbreakでループを抜けるような書き方をすると確認することができます。だけど実際のコーディングでこんな書き方(無限ループする)はしません。あくまで仕様確認としてのコードだと言うことをご理解ください。
“` for(;;) break; console.log(‘式を評価したらtrueでした’); //’式を評価したらtrueでした’“`
ネストされているイテレータの処理
iとjの関係は一度覚えてしまえば簡単です。腹落ちする解説は人によってそれぞれですが、「時計の長針と短針のような関係」と言ってる人もいましたね。なるほど。
“` [i=0,j=0]の次は [i=0,J=1] [i=0,J=9]が終わると以降 [i=1,J=0] [i=1,J=1] [i=1,J=9] “`
if文とfor文の覚え方
目が慣れるまでコードを書き続けましょうというしかないのですが、私はif(){}はこうで、for(;;){}はこうと寝る前に唱え続けました。(ちょっとだけホントですw)後は、if文とfor文の書き方をお家の人に、ペットに、ぬいぐるみに話しかけたりアウトプットをガンガンしましょう。
まとめ
以上で、DAY2の振り返りと補足でした。条件分岐や繰り返しを習うと、自動で動くのでプログラミングしてる感が一気に増しますよね。ワクワク。覚えたことは人に話したりブログに書いたり忘れないうちにアウトプットしましょう。『目慣れ、耳慣れ、タイプ慣れ』も大事です。頑張りましょう!