どうも。つじけ(tsujikenzo)です。このシリーズでは、2021年2月から始まりました「ノンプロ研GAS初級講座8期」について、講座内では伝えきれなかったことなどを、全8回でお届けします。今日は第5回(Day4)です。
前回のおさらい
前回は「関数・配列」ということで、引数や戻り値などの関数の基本から、関数リテラルやアロー関数を習いましたね。2次元配列の操作も行うようになって、動かせるコードが少しずつ増えてきた感じです。
今日は「オブジェクト・GASの世界」についてです。ノンプロ研初級講座の山場はここであり、もっとも学びのおおきいところです。
今日のアジェンダ
- オブジェクト(プロパティ)
- オブジェクト(メソッド)
- GASの世界(オブジェクト)
オブジェクト
プログラミングを学習すると、必ずぶつかる高い壁のひとつに「オブジェクト」があります。
しかし、臆することは何もありません。オブジェクトを体系的に、概念も含めて理解するためには、「学習する順番」が大事だと思います。本講座では学習を積み上げいくようなスタイルになっていますので、ひとつひとつ丁寧に習得していきましょう。
「プログラミングと挫折」について、以前ブログに書いたことがあるので紹介させていただきます。
ということで、例えばなしやそもそも話は無しで、さっそくオブジェクトの基礎から始めたいと思います。
GASのデータ型
みなさんはすでに、数値やテキストなどの値を操作してきました。
console.log(`テンプレート文字列は文字列型のリテラルの1つです`);さらに、値を変数に代入したり、演算子で処理も行いました。
const name = ‘Bob’; const taxInclude = 1000 * 1.08 ;
それぞれのデータ型をGASに認識してもらうために、決められた書き方のルール(リテラル)があることも学びました。配列リテラルのルールは角カッコで囲むことや複数の要素があるばあいは、カンマ区切りをすることでした。
const array = [10,20,30];本日習った「オブジェクト」も、GASのデータ型の1つで、配列と同様に「データ(値)の集合」の書き方のひとつになります。
GAS(Javascript)には他にもデータの集合を表すデータ型がありますが、中級講座までは「配列・オブジェクト」の2つを習得すれば十分だと思います。
const object = {name:’にんじゃわんこ’, age:35, favorite:’Apple’}
ぱっと見ただけでも、配列より少しだけ情報量が多いとおもいませんでしたでしょうか。そうなんです。「オブジェクト」は「配列で表現するのはちょっと大変だな」とか「インデックス方式で管理するのは限界があるな」というときに活躍するデータ型です。
オブジェクトリテラルの基本
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文を使いましょう。
メソッド
オブジェクトのプロパティに関数リテラルで関数を定義したものをメソッドと呼びます。メソッドにはアロー関数は使えません。その代わりにメソッド構文という省略記法があるので覚えといてください。
{ name: 'Bob', age: 25, greet() { console.log('Hello!'); } }
thisとはなにか
thisとはオブジェクトのことです。しかしまだ「どのオブジェクトなのか」が決まっていないオブジェクトです。
thisはthis自身が書かれている場所によって、このオブジェクトが何を指すのかを変えることができます。「書かれている場所」というのが、だいたい4パターンしかないので、4つのthisなんて言ったりします。
オブジェクトを操作する場合は、ドット記法で
オブジェクト.プロパティと書きましたよね。このオブジェクトが固定のものならオブジェクト名を書くだけなんですが、時と場合によって変化したいので、
this.nameのように、「thisを使って、まだ決まってないオブジェクトとして対応したい」という目的を叶えることができるのでした。 中級講座でクラスを学ぶ際に再度登場しますので、また機会がありましたら4つのthisについてご紹介したいと思います。
GASの世界
Day4の後半は少し座学的な内容になりまして、「GASとオブジェクトの関係性」についてお伝えしました。
GASはJavaScriptをベースとしたスクリプト言語で、ブラウザ内で動作するコードエディタが用意されており、スクリプトはサーバーサイドで実行されます。少し込み入った話をすると、JavaScriptはオブジェクト指向と呼ばれる、「スクリプトは全てオブジェクトで操作しようよ」という言語設計がなされています。
つまり、GASのサービス群は、オブジェクトで構成されているので、オブジェクトの仕組みを理解すると、スプレッドシートだけでなく、Gmailやフォームなど、様々なサービスをGASで操作できることになるんです、
私たちは、オブジェクトリテラルやオブジェクトの操作方法を徹底して学んだことにより、GASの「リファレンス」と呼ばれる取扱説明書を読めるようになったわけです。リファレンスが読めるようになると、一気に経験値があがったような気がします。最初は難しい部分も多いと思いますが、リファレンスを眺めるだけでも勉強になりますので、おススメです!
まとめ
以上で、「オブジェクト・GASの世界」についてでした。オブジェクトを「データの集合」としてとらえたときは、KeyとValueが対になった「連想配列」という呼び方で合っています。
しかしながら、オブジェクトには連想配列以上の機能が盛り込まれており、一言でオブジェクトを「連想配列」と片付けてしまうのは、少し惜しい感じがします。
先人達が作り上げてきた「組み込みオブジェクト」には、さまざまな知恵と工夫が盛り込まれています。矛盾することも数多くあったでしょうにどうやって乗り越えてきたのでしょうか。
深掘りするとキリがありませんが、先人達からの恩恵(プレゼント)を受け取って、私たちも次の世代に受け継いでいけるといいですね。
次回は、「スプレッドシート操作の基礎・前半」です。お楽しみに。
このシリーズの目次
- [ノンプロ研]GAS初級講座8期 事前課題
- [ノンプロ研]GAS初級講座8期DAY1補講 はじめてのGAS、変数、演算、データ型
- [ノンプロ研]GAS初級講座8期DAY2補講 制御構文
- [ノンプロ研]GAS初級講座8期DAY3補講 関数・配列
- [ノンプロ研]GAS初級講座8期DAY4補講 オブジェクト・GASの世界
- [ノンプロ研]GAS初級講座8期DAY5補講 スプレッドシートの操作 基本編
- [ノンプロ研]GAS初級講座8期DAY6補講 スプレッドシートの操作・実践編
- [GAS]スプレッドシートのセル考察 ~A1Notationってなに~ [前編]
- [GAS]スプレッドシートのセル考察 ~getRange()メソッドとセルアドレスリテラル~ [後編]