見出し画像

【GAS】初級の復習 その4(オブジェクト)

▼こちらの続き

今週末は副業の仕事もあまり入ってなかったので、GAS中級講座の動画受講と初心者講座の復習を並行して進めた。2つの講座を行ったり来たりすると頭が混乱するけれど、がんばる。

ところで私が受けている講座はこちらです。ご興味がある方はぜひ申し込んでみてください^^


さて、苦手意識のあるオブジェクトの復習に取り組んだ。オブジェクトについて本当にわかっていなかったな、、、と痛感している。

以下は記憶を定着させるための復習メモ。

オブジェクトの参照・プロパティの追加・値の上書き

書き方はドット記法とブラケット記法の2つ。

◆ドット記法 オブジェクト.プロパティ
◆ブラケット記法 オブジェクト[`プロパティ`]

いきなり最初の基本構文からあやしい。ちゃんと意識できていなかったし、ドット記法とブラケット記法の使い分けもわかっていない。写経も飛ばさずにやって、着実に理解しながら先に進む。

▼プロパティを追加したい場合や値を上書きしたい場合

◆ドット記法 オブジェクト.プロパティ = 値
◆ブラケット記法 オブジェクト[`プロパティ`] = 値

普段、オブジェクト自体をあまり使わないから「プロパティを追加する」という発想自体がそもそもあまり出てこない。プロパティを変数・定数で指定したいときはブラケット記法しか使えない。(知らなかった)

function myFunction4_03_02() {
 const person = { name: `Bob`, gender: `male`, age: 25 };

 person.name = `Tom`;
 person[`job`] = `Engeneer`;

 const prop = `favorite`;
 person[prop] = `Coffee`; //←ここはドット記法では書けない!
 console.log(person);
}


for..in文

オブジェクトの全てのプロパティを取り出すのがfor..in文。ポイントは「プロパティ」を取り出すこと(プロパティに格納されている値を取り出すわけではない)。むむむ、これもわかってなかったー!

コードはこんな感じ。↓

function myFunction4_04() {

 const results = { Japanese: 85, Math: 70, English: 65 };

 for (const key in results) {
   console.log(`${key}:${results[key]}`);
 }
}

ちなみに以下のコードだと(ドット記法では変数を呼び出せないので)undefinedが返ってくる。↓

function myFunction4_04_02() {

 const results = { Japanese: 85, Math: 70, English: 65 };

 for (const key in results) {
   console.log(`${key}:${results.key}`); //ドット記法では変数を呼び出せないためundefinedとなる
 }
}


メソッド

オブジェクトのプロパティに関数を割り当てたものを「メソッド」と呼ぶ。ここまではOK。

メソッドの呼び出しは以下のように書く。

オブジェクト.メソッド(引数1, 引数2,…)
{
 name: 'Bob', 
 age: 25, 
 greet() {
   console.log('Hello!');
 }
}

person.greet();

メソッドはドット記法で呼び出す。ブラケット記法は使えない。プロパティを変数で呼び出したいときはブラケット記法しか使えなかったので、この辺が混乱ポイント。また、メソッドではアロー関数は使えない(ホッとしてしまう私)。

オブジェクトの要素まとめ

画像1


メソッドの戻り値

メソッドもreturnできる。まぁ、関数だからそうだよね。でもあまり(というか一度も)そういったスクリプトを書いたことがない。

コード例はこちら。↓

function myFunction4_08() {

 const person = {
   name: `Bob`,
   age: 25,
   isAdult() {
     return person.age >= 18;
   }
 };

 console.log(person.isAdult()); //true
}

うーん、まぁ理解はできるけれど実務で使うイメージがまだ湧かない。

講座の後半は「オブジェクト(GASの世界)」という何だか思わせぶりなアジェンダ。そして演習がなくて、解説だけという・・!


組み込みオブジェクト

みんながよく使うだろうオブジェクト(プロパティやメソッド)を用意してくれているのが組み込みオブジェクトで、JavaScriptの組み込みオブジェクトと、GASのServicesがある。

そういえば、GAS本の写経をしていたときに組み込みオブジェクトあたりでさっぱり理解ができなくて、心が折れた記憶がある。さらにもっと前に独学でやっていたときは何回調べても「プロパティ」と「メソッド」の意味がわからず頓挫したこともある。この辺が講座を受けて人から教わって、しかも動画でも繰り返し復習ができることのメリットだなぁ。

数値・文字列・ブール値もラッパーオブジェクトといって、オブジェクトとして扱えるらしい。ラッパーオブジェクトって言葉は知ってはいたけど、今日動画を見返してやっとその意味が理解できた。

すごい!プロパティ便利!メソッド便利!(超絶今さら感)

function myFunction(){
 const num = 100;
 console.log(typeof num); //number
 const numToString = num.toString();
 console.log(typeof numToString); //string

 const name = `poppo`;
 console.log(name.length); //5

}


▼JavaScriptの組み込みオブジェクトのメンバー例

画像2

▼Google Workspace Services

画像3

さらに中級でやっているUI・トリガー・バイナリファイル(blobのことと思われる)・ZIP操作等もgoogle(GAS)が用意してくれたオブジェクトであると知った。

これまで普通にスプレッドシートとかでいろいろスクリプトを書いていたけど、そのオブジェクトのメソッドを呼び出している(実行している)ということだったのね。いや、本当に本当に今さらだけれど腹落ちした。


function myFunction(){
 SpreadsheetApp.getActiveSheet().getRange(1,1).setValue(`poppo`);
}

例えば、スプレッドシートのアクティブなシートのA1セルに「poppo」と入力するこのスクリプト。これまでは無意識に書いていたというか、こういう決まったルールのものだと理解していた。

でも、以下のように分解できるということがわかった。

・SpreadsheetAppというトップレベルオブジェクトのgetActiveSheetというメソッドを実行して、sheetオブジェクトが返ってくる
・sheetオブジェクトのgetRangeというメソッドに引数1,1を渡して、rangeオブジェクトが返ってくる
・rangeオブジェクトのsetValueというメソッドに`poppo`という引数を渡して値を書き込む

英語が苦手でリファレンスもあまり読めなかったけれど、Class・Properties・Method・Parameters(引数)・Return(戻り値)の意味が理解できたので、これからは読んでみようという気持ちになれた。

次回へ続く。



この記事が気に入ったらサポートをしてみませんか?