【GAS基礎編20】基本を覚える_オブジェクト
おはようございます!MARIEです(`・ω・´)ゞ
前回のテストはいかがでしたでしょうか?
GASの記事を書き始めて、今回の記事で20記事目となりました。
この記事を書く前までのGASの勉強は挫折気味でしたが、ここまでやってこれたのも皆さんが一緒に覚えていってくれているから(ノД`)・゜・。♪
基礎編はあと少しです!(っていってもまだまだありますが笑)
どうぞ引き続きよろしくお願いいたします!
オブジェクトについて
今日はオブジェクトについて、学んでいきましょう!
GAS(も含むJavaScript)では、データの集合を表す方法がいくつかあって、そのうちの1つがオブジェクトと言います。
実は配列もオブジェクトの一部だそう。(゚∀゚)ちょっとハテナなのでもう少し詳しく説明をしていこうと思います。
【配列の場合】
配列は、インデクスをキーにして値を扱っているので、
インデックスの番号で、箱の中身を出力することができますよね。
shopping [0] //バナナのこと
shopping [2] //200円のこと
//配列はインデックスで扱える
shopping = ['バナナ', '近所', '200円']
【オブジェクトの場合】
オブジェクトは、プロパティをキーにして値を扱える。つまり、
shopping.fruit //バナナのこと
shopping.money //金額のこと
//オブジェクトはkeyとvalueで扱う
shopping = {fruit:'バナナ', place:'近所', money:'200円'}
箱の名前で呼び出せる。それがオブジェクトです。
オブジェクトの書き方について
function productPrice() {
const shopping = shopping = { fruit: 'バナナ', place: '近所', money: '200円' }
{から}までがオブジェクトで、keyとvalueを:(コロン)で繋ぎます。
function productPrice() {
/*shoppingという名前のオブジェクトの中に、
プロパティのfruit、place、moneyがあり、
それぞれのプロパティに値が入っている
*/
const shopping = { fruit: 'バナナ', place: '近所', money: '200円' }
// オブジェクト全体はこう出力される
console.log(shopping);
// fruitを取り出すと
console.log(shopping.fruit);
// 書き換えることもできちゃうのです
shopping.fruit = 'りんご';
console.log(shopping.fruit);
// プロパティを追加することもできます
shopping.buyer = 'MARIEが買うよ';
console.log(shopping);
}
また、こんな風にプログラムの途中でオブジェクトの中身を書き換えたり、追加することもできちゃうのです。
オブジェクト実践的なやつ!
では少し実践的なものにチャレンジをしてみましょう!
まずは、スプレットシートに、オブジェクトのシートを作成してください。
function productPrice() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('オブジェクト');
const shopping = {
fruit: sheet.getRange("A2").getValue(),
place: sheet.getRange("B2").getValue(),
money: sheet.getRange("C2").getValue(),
};
//ここに出力をしたい文字列を作成してみようと思います!
}
出力をする文章は以下とします。
「近所のスーパーに行って、明日の朝に食べるバナナを200円で買ってきました。」
【回答プログラムはこちら】
function productPrice() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('オブジェクト');
const shopping = {
fruit: sheet.getRange("A2").getValue(),
place: sheet.getRange("B2").getValue(),
money: sheet.getRange("C2").getValue(),
};
const message = `${shopping.place} のスーパーに行って、明日の朝に食べる ${shopping.fruit} を ${shopping.money} で買ってきました。`;
sheet.getRange('A5').setValue(message);
}
簡単に解説をすると、以下の部分は、スプレットシートのセルから値を取得してオブジェクトを作る、 { key: value, key: value } の形になっています。
const shopping = {
fruit: sheet.getRange("A2").getValue(),
place: sheet.getRange("B2").getValue(),
money: sheet.getRange("C2").getValue(),
};
そして、以下の部分で文字列を作っているのです。
const message = `${shopping.place} のスーパーに行って、明日の朝に食べる ${shopping.fruit} を ${shopping.money} で買ってきました。`;
最後に以下の部分でセルに入力をするというプログラムになっています。
sheet.getRange('A5').setValue(message);
いかがでしょうか。オブジェクトについて理解はできましたか?
オブジェクトのメリット
例えば、配列で近所のスーパーのバナナの金額を扱いたいときは、
以下のようになりますよね。
shopping = [バナナ,近所,200円]
この場合、インデックスの[2]に金額が入っているということを覚えておかなければいけません。しかしオブジェクトの形にするとどうでしょうか。
shopping = {
fruit: 'バナナ',
place: '近所',
money: 200
};
オブジェクトの形にすると「shopping.money」で金額を取得することができ、すごくわかりやすいです。自分が後から見直した時はもちろんのこと、自分以外の人がプログラムを見た時にも、何を扱っているのかが明確にわかるのもオブジェクトのいいところです。
【実践での使い方】
上記のスプレットシートから、下のデータを作って処理をする場合、
普通の配列のときの「金額の合計」の出し方は以下でしたね。
const moneys = [200, 150, 100];
let total = 0;
for (const money of moneys){
total = total + money;
}
では、以下の場合の「金額の合計」はどうやって出すでしょうか。
const shopping = [
{ fruit: 'バナナ', place: '近所', money: 200 },
{ fruit: 'バナナ', place: '隣町のスーパー', money: 150 },
{ fruit: 'バナナ', place: '車で30分のスーパー', money: 100 }
];
以下のプログラムをコピペして実行してみましょう!
function productPrice() {
const shoppings = [
{ fruit: 'バナナ', place: '近所', money: 200 },
{ fruit: 'バナナ', place: '隣町のスーパー', money: 150 },
{ fruit: 'バナナ', place: '車で30分のスーパー', money: 100 }
];
// 合計金額を出したい
let total = 0;
for (const shopping of shoppings) {
total = total + shopping.money;
}
console.log(total);
}
結果はこうなりました。
ちゃんと合計値を出すことができました(゚∀゚)
また、オブジェクトにはいろいろなものを入れることができます。
①文字列
②数字
③配列
④オブジェクト
オブジェクトの中にオブジェクトを入れることもできるんですね(゚∀゚)
では宿題です
■スプレットシートに、オブジェクトのシートを作成してください
■以下のプログラムを修正して、
「近所のスーパーに行って、明日の朝に自分が食べるバナナを200円で買ってきました。」と出力するようにしてください。
function myObject() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('オブジェクト');
const shopping = {
fruit: sheet.getRange("A2").getValue(),
place: sheet.getRange("B2").getValue(),
money: sheet.getRange("C2").getValue(),
};
const message = `${shopping.place} のスーパーに行って、明日の朝に食べる ${shopping.fruit} を ${shopping.money} で買ってきました。`;
sheet.getRange('A5').setValue(message);
}
宿題は以上です!
ではまた次回よろしくお願いいたします(`・ω・´)ゞ