ここではDartで使用できる基本的な変数の型について説明します。
変数と変数の型について
Dartに限らず、プログラミングをするならば変数の理解は基礎中の基礎です。
必ず理解しましょう。
変数とは
変数とはプログラムでいろいろな処理を際に代わっていく値を格納するための箱のこと。
例えば現実で料理をする際、具材を洗う→皮を剥く→輪切りにする→加熱する→…と状態が変化していきますが、その間ずーっと手に持っているわけではないですよね。
途中ほかの作業をするために、ボールとか器に一時的に入れて置いておきます。
プログラムにおいてもいろいろな値をどんどん変化させたり記憶させながら、複数の作業を並行して進めていくことになるため、値を一時的に格納するための置き場が必要です。
この値の置き場を変数といいます。
変数には主に次の操作をすることができます。
- 宣言 → 変数を使用することを宣言する。この時、変数に名前を指定する。
- 代入 → 宣言した変数に対して値を格納する。
- 参照 → 宣言した変数から値を取得する。
変数の型
変数には型があります。
型とは、どのような値を扱うのかを示すものです。
基本的な型 については後述しますが、次のようなイメージです。

左側の変数は整数型で、整数値を格納できます。(丸い器)
右側の変数は文字列型で、文字を格納できます。(四角い器)
箱の形が違うので、型が異なる変数には値を格納することができません。
変数の宣言
変数を実際に利用する前に、変数の型と変数名を宣言する必要があります。
具体的には次のように 変数の型+スペース+変数名; で宣言します。
また、宣言時に初期値を設定することもできます。
var value1;
var value2 = 'value2の値';
- varは数値や文字列など、なんでも格納(動的型)できます。
- var型の変数に初期値を設定した場合は型推論が行われ、型の異なる値を代入できなくなります。
- ここら辺の説明は後述します。
基本的な変数の型
Dartではすべての型がオブジェクト型として用意されており、ほかの言語にあるような値型(プリミティブ型)が存在しません。
なにをもって基本的な型と呼ぶかは置いておいて、coreライブラリにより提供されている組み込みの型は次のとおり。
num(数値)
数字を示す型はDartでは整数を扱うintと、浮動小数点を扱うdoubleの2種類が用意されています。
いずれも64bitの長さを持ち、ほかの言語のように、32bitや16bitの型は用意されていません。
Dartにおける型 | 概要 | 扱えるサイズ | Javaの場合 | C言語の場合 | VB.NETの場合 |
---|---|---|---|---|---|
int | 整数 | 64bit | long | long long | Long |
ー | 32bit | int | intまたはlong | Integer | |
ー | 16bit | short | short | Short | |
ー | 8bit | byte | ー | Byte | |
double | 浮動小数点数 | 64bit | double | double | Double |
ー | 32bit | float | float | Single |
int(整数)
少数部を持たない整数はintを使用します。
int型の値は整数値のほか、16進数表記も可能で、次のいずれの書き方でも有効です。
int num1 = 123;
int num2 = 0x12;
double(浮動小数点)
浮動小数点数はdoubleを使用します。
double型の値は数値、16進数表記のほか、指数表記も可能です。
double num1 = 123.456;
double num2 = 0x12;
double num3 = 2e+5;
bool(論理値)
真(true)か偽(false)を示す2値を保持するための型。
プログラマーにとってはお馴染みですが、処理の結果やif文などで式を評価する際に使います。
bool bol1 = true;
bool bol2 = false;
String(文字列)
文字や文字列を格納するための型がStringです。(1文字を格納するcharのような型は用意されていない)
文字列の値は次のいずれかの記号で括ります。(どっちでもいい)
- シングルクォーテーション(’)
- ダブルクォーテーション(”)
String str1 = 'abc';
String str2 = "abc";
シングルクォーテーションやダブルクォーテーションは文字列の始まりと終わりを示す記号としての役割があるため、文字列の中でこれらの記号を使いたいときはエスケープシーケンス(\)を付けるか、文字列を括る際、文字列として使いたい記号と異なる記号で括ります。
String str3 = '\''; // シングルクォーテーションを表示する
String str4 = "'"; // シングルクォーテーションを表示する
String str5 = '"'; // ダブルクォーテーションを表示する
List(配列)
配列はDartではListで定義します。
配列とは1つの名前で複数の同じ型の値(要素)を保持できるもので、言ってみれば駅のロッカーみたいなもの。(同じ箱がたくさん並んでいるということを言いたい…)
例えば整数型の値を格納するListは次のように宣言します。
var list1 = [1, 2, 3]; // var型で宣言して初期値として整数値を代入する。
List<int> list2 = [1, 2, 3]; // 要素がint型のListであることを明示して宣言する。
int list3 = [1, 2, 3]; // NG
- list1 はvar型として宣言していますが、初期値として整数を代入しているので、型推論で要素はint型だと判断されます。
- list2は明示的にint型のListとして宣言します。初期値を代入しないListを宣言する場合にはこの形で宣言しておいたほうがいいでしょう。
- list3はエラーになり宣言できません。
初期値を与えない場合は次のように空の大括弧([])を右辺に指定して宣言します。
var list1 = [];
var list2 = <int>[];
List<String> list3 = [];
配列への要素の代入は大括弧の中に代入する要素をカンマ区切りで指定します。
配列の中身を参照する場合は、参照したい要素番号を指定します。(要素番号は0からカウント)
print(list1[0]); // Listの1番目の要素を表示
配列の具体的な使い方は別途説明したいと思います。
Set(ユニークなコレクション)
Listと同じような型としてSetがあります。
Listと異なるのは、Setは要素内の値がユニークでなければなりません。
また、Setで使用するのは中括弧({})を使います。
var set1 = {1, 2, 3}; // var型で宣言して初期値として整数値を代入する。
Set<int> set2 = {1, 2, 3}; // 要素がint型のSetであることを明示して宣言する。
int set3 = {1, 2, 3}; // NG
初期値を与えない場合は次のように空の中括弧を右辺に指定して宣言します。
var set1 = {};
var set2 = <int>{};
Set<String> set3 = {};
Map(キーワード付きのコレクション)
Mapは、キーワードと値をセットにして管理できる型です。
ListやSetの各要素を呼び出すためのキーワードが付いたようなもの。
Map内の要素は、キーワード: 値 で指定します。(複数の要素はカンマ(,)で区切って定義します)
var map1 = {
1: 'aaa',
2: 'bbb',
3: 'ccc'
}
初期値を設定しない場合は次のように宣言します。
Map map1 = {};
Map<int, String> map2 = {}; // キーワードと値それぞれの型を指定
まとめ
Dartにおける基本的な変数についてまとめました。
変数を使わないプログラムはありません。
必ず覚えておきましょう。
また個人的な意見ですが、型推論などが発生するようなコーディングはやむを得ない場合を除いて避けるべきと考えています。
変数が扱う値の型を意識しながらプログラムを書いたほうが、保守性の高いプログラムになります。(後から見たときにわかりやすい)

コメント