初心者がデータ型を学習する際の悩み
GoogleAppsScriptは、Googleのサービスを自動化するためのスクリプト言語です。
Googleスプレッドシートやフォーム、ドキュメントなどのアプリケーションと連携して、便利な機能を追加することができます。
しかし、GoogleAppsScriptを使う上で、「データ型」の理解が難しいという初心者の悩みは少なくありません。
データ型を理解できないと、変数の扱いやデータの操作ができず、スクリプトの作成が難しくなってしまいます。
そのため、初心者にとって、GoogleAppsScriptのデータ型をしっかりと理解する方法を知りたいというニーズが高まっています。
データ型を理解しておかないと、例えば、数値型と文字列型の違いがわからず、数値の計算ができなかったり、文字列の結合ができなかったりします。
データ型のエラーも初心者がよく遭遇するものなので、しっかりと理解しておきたいですね。
記事中には確認コードもありますので、ぜひコピペしてご自身で実際に動かしてみてくださいね。
データ型の種類
GoogleAppsScriptには、以下のようなさまざまなデータ型が用意されています。
基本的なデータ型として下記の10個を覚えておきましょう。(厳密に言うと他にもあります)
- 数値型(Number)
- 文字列型(String)
- 論理型(Boolean)
- 配列型 (Array)
- 日付型(Date)
- オブジェクト型 (Object)
- 関数型 (Function)
- null型 (null)
- undefined型 (undefined)
- エラー型
1.数値型(Number)
- 整数や小数点を扱うデータ型です。
- 数値型は計算処理に使用できます。
num3 * 10
のように、変数同士の演算が可能です。 - 下記のnum1、num2、num3が数値型の変数です。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
function main() {
let num1 = 42; // 整数
let num2 = 3.14; // 浮動小数点数
let num3 = 2e+3; // 指数表記 (2000)
console.log(num1 + num2); // 45.14
console.log(num3 * 10); // 20000
}
-
console.log()
関数は、引数に渡された値をコンソールに出力します。 -
num1 + num2
は、num1
とnum2
の和を計算し、その結果 (45.14) を出力します。 -
num3 * 10
は、num3
に 10 を掛けた値 (20000) を計算し、その結果を出力します。
2.文字列型(String)
- 文字や文章を扱うデータ型です。
- 例えば、str1 という変数に"Hello"という文字列を代入することができます。
- 文字列型では、文字の結合や分割などの操作が可能です。
str1 + " " + str2
のように、変数同士を結合できます。 - 下記のstr1、str2、str3が文字列型の変数です。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
function main() {
let str1 = "Hello"; // ダブルクォーテーション
let str2 = 'World'; // シングルクォーテーション
let str3 = `This is
a multiline string`; // バッククォーテーション(テンプレートリテラル)
console.log(str1 + " " + str2); // "Hello World"
console.log(str3); // "This is\\na multiline string"
}
変数の宣言部分では、3つの変数 str1
, str2
, str3
に、それぞれ異なる方法で文字列を代入しています。
- ダブルクォーテーション (""): 最も一般的な方法です。
文字列中にダブルクォーテーションを含む場合は、エスケープシーケンス (
\n
,\\
) を使用する必要があります。 - シングルクォーテーション (''): ダブルクォーテーションと同じように使用できます。
しかし、シングルクォーテーションを含む場合はエスケープシーケンスが必要ありません。
- バッククォーテーション (``): テンプレートリテラルと呼ばれ、変数や式を直接文字列に埋め込むことができます。
改行文字 (
\n
) もそのまま埋め込むことができます。
出力部分では、str1
と str2
の文字列を結合し、結果をコンソールに出力しています。
-
+
演算子は、文字列同士の結合に使用されます。 - スペース (" ") を間に挟むことで、"Hello World" という一つの文字列になります。
3.論理型(Boolean)
- true または falseの2つの値を持つデータ型です。
- 例えば、isAdult変数にtrueを代入したり、hasTicket変数にfalseを代入したりするのに使用します。
- 論理型は、if文などの条件分岐の判断に使用されます。
- 下記のbool1、bool2が論理型の変数です。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
function main() {
let bool1 = true;
let bool2 = false;
console.log(bool1 && bool2); // false (論理積)
console.log(bool1 || bool2); // true (論理和)
console.log(!bool1); // false (否定)
}
変数の宣言部分では、2つの変数 bool1
と bool2
を宣言し、それぞれ true
と false
の値を代入しています。
-
let
キーワードは、変数のスコープをブロック内に限定します。 -
bool1
にはtrue
を代入しています。これは、論理的に真であることを意味します。 -
bool2
にはfalse
を代入しています。これは、論理的に偽であることを意味します。
出力部分では、論理演算子 (&&
, ||
, !
) を使用して、条件分岐を行っています。
-
&&
(論理積): 両方のオペランドがtrue
の場合のみtrue
を返します。 -
||
(論理和): 少なくとも一方のオペランドがtrue
の場合にtrue
を返します。 -
!
(否定): オペランドの真偽を反転します。
4.配列型 (Array)
- 複数の値を1つのまとまりとして扱えるデータ型です。
- 例えば、scores = [80, 85, 90, 75]のように、数値型の値を格納できます。
- 配列には、length プロパティで要素数を取得したり、push() メソッドで要素を追加したりできます。
- 下記のfruitsが配列型の変数です。
- 1
- 2
- 3
- 4
- 5
function main() {
let fruits = ["Apple", "Banana", "Cherry"];
console.log(fruits[0]); // "Apple"(0番目)
console.log(fruits.length); // 3(配列の要素数)
}
変数の宣言部分では、fruits
という名前の配列を宣言し、3つの文字列要素 ("Apple", "Banana", "Cherry") を代入しています。
-
let
キーワードは、変数のスコープをブロック内に限定します。 -
fruits
は配列型を表す変数名です。 -
[]
は、配列の要素を囲む記号です。 -
"Apple", "Banana", "Cherry"
は、配列に格納される要素です。要素はカンマ (,) で区切られま
出力部分では、fruits
配列の長さをコンソールに出力しています。
-
console.log(fruits[0]);
は、fruits
配列の最初の要素 ("Apple"
) をコンソールに出力します。配列の要素には、0から始まるインデックス番号を使用してアクセスできます。 -
fruits.length
は、fruits
配列に格納されている要素数を表すプロパティです。
5.日付型(Date)
- 日付や時刻の情報を扱うデータ型です。
- 例えば、today変数に現在の日付を代入したり、deadline変数に期限日を代入したりするのに使用します。
- 日付型では、日付の計算や書式設定ができます。today.getDate()のように、日付情報を取り出すこともできます。
- 下記のtoday、deadlineが日付型の変数です。
- 1
- 2
- 3
- 4
- 5
- 6
function main() {
let today = new Date();
let deadline = new Date(2023, 11, 31, 23, 59, 59);
Logger.log("日付型: " + today + ", " + deadline);
Logger.log("日付要素: " + today.getDate() + "/" + (today.getMonth() + 1) + "/" + today.getFullYear());
}
let today = new Date();
では、new Date()
コンストラクタを使用して現在の日付を生成し、today
変数に代入しています。
-
new Date()
: 現在の日付と時刻を表す新しい Date オブジェクトを作成します。 -
today
: Date オブジェクトを格納する変数名です。
let deadline = new Date(2023, 11, 31, 23, 59, 59);
は、new Date()
コンストラクタを使用して特定の日付 (2023年12月31日 23時59分59秒) を生成し、deadline
変数に代入しています。
-
new Date(year, month, date, hours, minutes, seconds, milliseconds)
: 指定した年、月、日、時、分、秒、ミリ秒を使用して新しい Date オブジェクトを作成します。 -
deadline
: 特定の日付を格納する変数名です。 - 各引数は、日付と時刻のそれぞれの要素を表します。月は 0 から 11 までの数値で表され、0 が 1 月、11 が 12 月となります。
Logger.log("日付型: " + today + ", " + deadline);
では、fruits
配列の長さをコンソールに出力しています。
-
Logger.log()
: 引数に渡された値をコンソールに出力します。 -
"日付型: " + today + ", " + deadline
: 出力されるメッセージの内容です。today
とdeadline
変数の値がカンマ区切りで連結されています。
Logger.log("日付要素: " + today.getDate() + "/" + (today.getMonth() + 1) + "/" + today.getFullYear());
は、today
変数の日付要素 (年、月、日) を取得し、コンソールに出力しています。
-
today.getFullYear()
:today
変数の年の値を取得します。 -
today.getMonth() + 1
:today
変数の月の値を取得し、1 を加算します。月は 0 から 11 までの数値で表されるため、1 を加算することで 1 から 12 の範囲になります。 -
today.getDate()
:today
変数の日の値を取得します。 - 各要素はスラッシュ (/) で区切られています。
6.オブジェクト型 (Object)
- 複数のデータを1つのまとまりとして扱えるデータ型です。
- 例えば、user変数に名前、年齢、メールアドレスなどの情報をまとめて代入するのに使用します。
- オブジェクト型には、配列やディクショナリなどがあり、複雑なデータ構造を表現できます。
- 下記のpersonがオブジェクト型の変数です。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
let person = {
name: "John",
age: 30,
greet: function() {
console.log("Hello, I'm " + this.name);
}
};
console.log(person.name); // "John"
person.greet(); // "Hello, I'm John"
変数の宣言部分では、オブジェクトリテラルと呼ばれる構文を使用して person
という名前のオブジェクトを作成しています。
-
{}
: オブジェクトを表す記号です。 -
name: "John"
: "name" というキーに "John" という値を格納するプロパティを定義します。 -
age: 30
: "age" というキーに 30 という値を格納するプロパティを定義します。 -
greet: function() {...}
: "greet" というキーに、関数を値として格納するプロパティを定義します。この関数は、オブジェクトのプロパティ (this.name
) を使用して "Hello, I'm " と名前を出力します。
console.log(person.name);
は、person
オブジェクトの "name" プロパティの値を取得し、コンソールに出力しています。
-
person.name
: オブジェクトのプロパティにアクセスするには、ドット記法を使用します。
person.greet();は
、person
オブジェクトの "greet" メソッドを呼び出しています。
-
person.greet()
: オブジェクトのメソッドを呼び出すには、ドット記法とメソッド名を使用します。
7.関数型 (Function)
- 処理をまとめた再利用可能なコードブロックです。
- 例えば、function calculateArea(width, height) { return width * height; }のように定義し、calculateArea(5, 10)のように呼び出して使用します。
- 関数には引数を受け取ったり、値を返したりする機能があります。
- 下記のareaが関数型の変数です。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
function main() {
// 関数型
function calculateArea(width, height) {
return width * height;
}
let area = calculateArea(5, 10);
Logger.log("関数型: " + area);
}
冒頭部分では、calculateArea
という名前の関数を定義しています。
-
function
: 関数定義を表すキーワードです。 -
calculateArea
: 関数名です。この名前で関数を呼び出すことができます。 -
width, height
: 関数の引数です。関数が実行されるときに渡される値です。 -
return width * height;
: 関数の実行結果を返すステートメントです。この式は、width
とheight
の値を掛け合わせた値を返します。
let area = calculateArea(5, 10);
では、calculateArea
関数を 5
と 10
という引数と共に呼び出し、その結果を area
変数に代入しています。
-
area = calculateArea(5, 10);
: 関数呼び出し式です。calculateArea
関数に5
と10
という値を渡し、その結果をarea
変数に格納します。
Logger.log("関数型: " + area);
では、Logger.log()
関数を使用して area
変数の値をコンソールに出力しています。
-
Logger.log("関数型: " + area);
: コンソールに出力するメッセージの内容です。"関数型: "
という文字列とarea
変数の値が連結されています。
8.null型 (null)
- 値が存在しないことを明示的に表す特別なデータ型です。
- 例えば、let result = null;のように、変数に何も値が代入されていない状態を表します。
- 1
- 2
- 3
- 4
function main() {
let result = null; // null (意図的に空の値を設定)
console.log(result)
}
let result = null;
は、result
という変数に null
値を代入しています。
-
null
: 値が存在しないことを表す特別な値です。 -
let
: 変数宣言に使用されるキーワードです。 -
result
: 変数名です。
console.log(result)
では、console.log()
関数を使用して result
変数の値をコンソールに出力しています。
-
console.log()
: 引数に渡された値をコンソールに出力する関数です。 -
result
:null
値が代入されている変数です。
9.undefined型 (undefined)
- 変数が宣言されているが、値が代入されていない状態を表すデータ型です。
- 例えば、let x;のように、変数xが宣言されているが、値が代入されていない場合にundefinedとなります。
- 1
- 2
- 3
- 4
function main() {
let x;
console.log(x); // undefined (値が割り当てられていない)
}
let x;
では、x
という名前の変数を宣言しています。
-
let
: 変数宣言に使用されるキーワードです。 -
x
: 変数名です。
console.log(x);
では、console.log()
関数を使用して x
変数の値をコンソールに出力しています。
-
console.log()
: 引数に渡された値をコンソールに出力する関数です。 -
x
: 値が代入されていない変数です。
10.エラー型
- プログラム実行中に発生した エラー情報を表す型 です。
-
try...catch
ブロックを使用して、エラー処理を行うことができます。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
function main() {
try {
// エラーが発生する可能性のあるコード
let result = divide(10, 0); // 0 で除算しようとする
console.log(result);
} catch (error) {
// エラーが発生した場合の処理
console.error(error.message); // エラーメッセージを出力
} finally {
// エラー発生に関わらず必ず実行される処理
console.log("処理が完了しました。");
}
function divide(num1, num2) {
if (num2 === 0) {
throw new Error("Division by zero"); // エラーをスローする
}
return num1 / num2;
}
}
try { }
のブロック内には、エラーが発生する可能性のあるコードを記述します。
- 本例では、
divide(10, 0)
の呼び出しがエラーの原因となる可能性があります。
catch (error) { }
のブロックには、try
ブロック内でエラーが発生した場合に実行されます。
-
error
変数には、発生したエラーオブジェクトが格納されます。 - 本例では、
console.error(error.message)
によって、エラーメッセージを出力しています。
finally { }
のブロックは、try
ブロックと catch
ブロックの どちら が実行されたかに関わらず、必ず実行されます。
- 本例では、処理完了メッセージを出力しています。
function divide(num1, num2) { }
の関数は、2 つの数値を受け取り、それらを除算する処理を行います。
- 引数
num2
が 0 である場合は、throw new Error("Division by zero")
によって、エラーをスローします。 - エラーが発生しなかった場合は、除算結果を返します。
これらのデータ型を理解し、状況に応じて適切に使い分けることが大切です。
しかし、初心者の方にとっては、そのような基礎的な知識の習得が難しいと感じている方も多いでしょう。
今回ご紹介した、GoogleAppsScriptのデータ型に関する解説を参考にしていただければ、スクリプト作成がより簡単になるはずです。
数値型、文字列型、論理型、日付型、オブジェクト型といった、さまざまなデータ型の特性を理解し、
状況に合わせて適切に使い分けられるようになれば、より効果的なGoogleAppsScriptが書けるようになります。
ぜひ、この機会にデータ型の基礎を固めてみてください。
X(旧Twitter) >>> https://twitter.com/pikary_box
Instagram >>> https://www.instagram.com/pikary_box/