どうも。つじけ(tsujikenzo)です。2020年11月から始まりましたノンプロ研GAS初級講座7期ですが、このシリーズでは講座中では時間の都合でお伝えできなかったことなどを、全6回+おまけという感じでお届けしております。本日は4回目でございます。
前回のおさらい
前回は「関数・配列」ということで、関数の引数と戻り値そして山場と言える関数リテラル(アロー関数)、配列のリテラル、要素の代入と呼び出しを習いました。
カタカナ語が増えてきてちょっと苦しくなってきましたが💦繰り返しコードを書いて、記憶を定着していきましょう。その為にアウトプットが大事です。人に話したりTweetしたりぬいぐるみに話しかけたり(ラバーダッキングという学習法です)しましょう。
DAY4補講
それではDAY4を振り返ります。今日は「オブジェクト」についてでした。
オブジェクト
プログラミングを学習する時に初級者が「オブジェクト」という単語を完全に理解するには、相当な訓練が必要です。直訳では「物」という意味ですが、現実世界の「物とは〇〇である」という定義が広く、一言で表すのが難しいのと同様です。
これから学習を進めていく上で、何度もオブジェクトさんと出くわし、その度に「ごきげんよう」と言葉を交わし、自らは何も語らないオブジェクトさんに対して我々は「いつもありがとうございます。」と敬意を払うしかないです。(正確に言うと最初にオブジェクトの仕組みを考えた人は天才だなといつも思うだけですw)
配列とオブジェクト
まずは前回習いましたデータの集合の書き方として「配列型」があって、他に「オブジェクト型」というデータの集合の表現方法がある、と捉えていきましょう。
学習のコツ
少し前置きが長くなりましたが、GAS初級講座ではまず「オブジェクトのリテラル」を習得することを目指しましょう。オブジェクトの書き方のルールを徹底的に覚えて、オブジェクトを自分で定義してみて、プロパティを追加したり、プロパティを書き換えたり、プロパティを呼び出したり、後半戦ではメソッドを定義したり、メソッドを呼び出したり、オブジェクトの操作を習得しましょう。
オブジェクトリテラルの基本
オブジェクトは下記のような記述ルール(リテラル)があり、逆にこのルールに従って書くとそれはオブジェクトだとGASは認識してくれます。
- オブジェクトは必ず波カッコ{}で囲まれており、
- プロパティ(一つ一つの要素)はkey:value形式、
- プロパティのkeyは文字列型であることが望ましいが、文字列型リテラルで書かなくてもよい。
- 複数のプロパティがある時はカンマ区切りで記述しなければなりません。
(過去に詳しく書いたことがあるので、こちらも参考にしていただけたら)
プロパティの追加と呼び出し方法
プロパティの操作について[ドット記法][ブラケット記法]の2種類の方法があります。それぞれ追加と呼び出しについてまとめます。
“` const person = {id:’tg001’, name:‘つじけ’, age:35, favorite:‘Coffee’}; //追加 person.address = ‘北海道’; //ドット記法 person[‘address’] = ‘北海道’; //ブラケット記法(シングル・ダブルクォーテーションで囲みます)
//呼び出し console.log(person.address); // ‘北海道’; console.log(person[‘address’]); // ‘北海道’; “`
プロパティの追加、と書きましたが、既に同じ名前のキーが存在した場合は値の上書きになります。(ドット記法は割愛します)
“` const person = {id:’tg001’, name:‘つじけ’, age:35, favorite:‘Coffee’, address:‘北海道’}; //追加 person[‘address’] = ‘札幌市’;
//呼び出し console.log(person[‘address’]); // ‘札幌市’; “`
プロパティの定義、呼び出しに変数を使用する
講座中にお伝えした通りですが、こちらについてもブログで詳しく書きましたので、参考になれば幸いです。
for in 文の取り出し順について
for in文はプロパティの取り出し順が補償されていません。たまたま記述順に取り出されることがありますが(ランダムではありません)、正式には補償されていません。思わぬ結果を招くことがありますので、記述順でプロパティを取り出したい時はfor of文を使いましょう。
ちなみにES2020ではfor in文の取り出し順が記述順となりました。GASも早く最新のECMAScriptに対応して欲しいものです。
メソッド
オブジェクトのプロパティに関数リテラルで関数を定義したものをメソッドと呼びます。メソッドにはアロー関数は使えません。その代わりにメソッド構文という省略記法があるので覚えといてください。
“` { name: ‘Bob’, age: 25, greet() { console.log(‘Hello!’); } } “`
thisとはなにか
thisとはオブジェクトのことです。しかしまだ「どのオブジェクトなのか」が決まっていないオブジェクトなのです。
thisはthis自身が書かれている場所によってオブジェクトをコロコロ変えることができます。「書かれている場所」というのが、だいたい4パターンしかないので、4つのthisなんて言ったりします。
オブジェクトを操作する場合は、ドット記法で
>オブジェクト.プロパティ
と書きましたよね。このオブジェクトが固定のものならオブジェクト名を書くだけなんですが、時と場合によって変化したいので、
>this.name
のように、thisを使って変化に対応したい、というお話なのです。中級講座でクラスを学ぶ際に再度登場しますので、また機会がありましたら4つのthinについてご紹介したいと思います。
GASの世界
Day4の後半にこの話を持ってくるのは個人的にとても好きです。この話とは「GASとオブジェクトについて」なのですが、今までは基礎の足固めをしっかりやって、いよいよGASのサービス群とこんにちわしましょう、GASでスプレッドシートやGmailを使い倒してやろうという(実際にはお手柔らかにお願いします💦って感じですが)冒険に飛び出す感じです。
GASはJavaScriptをベースとしたスクリプト言語で、ブラウザ内で動作するコードエディタが用意されており(新IDE発表されましたね!ワクワク)、スクリプトはサーバーサイドで実行されます。
そして、JavaScriptはオブジェクト指向と呼ばれる、「スクリプトは全てオブジェクトで操作しようよ」というモチーフで設計されています。つまり、私たちはオブジェクトリテラルやオブジェクトの操作方法を学んだことにより、後はGASのリファレンス(取扱説明書)を読みながら、一人で大海原に出航することができるのです。不安でしょうか?いいえ、きっと皆さんなら大丈夫です。
まとめ
以上で、DAY4の振り返りと補足でした。2020年6月にGAS初級講座5期のTAとして「GASの外の世界」という卒業LTをやりました。(いつかブログにします)「JavaScriptとは何か?」「GASとは何か?」という内容でしたので、ノンプロ研メンバーで興味がある方は是非。
次回はいよいよ『スプレッドシート操作の基礎・前半』です。今まで習った基礎をガンガン使い倒していきます。ワクワクですね~。