コレクション
基本的な型の他にプログラマがよく利用するものに、一次元配列(リスト)や連想配列(マップやディクショナリと表現する言語もあります)があります。このような、複数の値を管理するデータセット用のクラスを一般的にコレクションと言います。Dartの基本ライブラリでもこれらの型は提供されているので、それぞれ紹介します。
一次元配列(List)
Dartで配列を管理する場合には、Listが利用できます。Arrayという型は基本ライブラリには無いのでご注意ください。また、リスト12が実際に利用した場合の例です。
main() {
// (1)空のリストを作る場合
List list1 = [];
// (2)値を設定する場合
List list2 = [2,4,6,8,10];
list2.add(12); // (3) 値を追加する場合
// (3)型が決まらない値を追加する場合
List list3 = ["two","three","four",5,6,7];
// (4)値の取得方法
print(list3.elementAt(0)); // 0番目値の"two"を取得する
print(list3[2]); // 2番目値の"four"を取得する
// (5)省略した場合には、dynamicと同じ
List list4 = [2,4,6,8,10];
list4.add("twelve");
}
空のListを作成する場合、(1)のように[]を使うことで作成できます。また、変数の宣言時に値を設定する場合には、(2)の通りにします。そして、値を追加する場合は、addというメソッドを利用します。また、Generic型で追加できる型を制限していますが、指定したくない場合には(3)のようにdynamic型を指定します。
そして、値を取得するには、(4)のようにelementAtというメソッドを使って取得することもできますが、メソッドを使わず[]を使ってアクセスすることも可能です。(5)のように型を省略できます。その場合には、dynamic型を指定した時と同じになります。そして、値を指定していても、省略した場合にはdynamic型を指定したことと同じです。
ユニークな値の一次元配列(Set)
Setとは、同じ値を含まない一次元配列のようなデータセットを管理するための型です。リスト13が実際に利用した場合の例です。
void main(){
// (1)空のSetを作る場合
Set values = {};
// (2)初期値を指定する場合
Set values2 = {2,3,5};
values2.add(6); // (3)値を追加する場合
values2.add(6); // 同じ値は2つ追加できない
// (4)値を取得する方法
int val_2 = values.elementAt(0);
// (5) []を使ったアクセスはできません
// int val_3 = values[0];
}
空のSetを作成する場合、(1)のように{}を使うことで作成できます。また、変数の宣言時に値を設定する場合には、(2)の通りにします。そして、値を追加する場合は、Listと同じようaddメソッドを使います。しかし、Listと最も異なるのが、同じ値は重複して登録はできません。そして、値の取得は(4)のようにelementAtを使うことができますが、(5)Listと同じように[]を使って値の取得はできません。
連想配列(Map)
Mapとは、キーとそのキーにひも付きいた値を管理するための型です。そのため、辞書型(ディクショナリ)と言われる場合もあります。DartではMapと呼ばれています。リスト14が実際に利用した場合の例です。
void main(){
// (1)空のマップを作成する
Map values1 = {};
// (2)インスタンス作成時に値を設定する
Map values2 = {'one' : 1, 'two' : 2};
// (3)値を追加する方法
values1['three'] = 3;
// (4)値の取得
print(values2['one']);
}
空のMapを作成する場合には、(1)のように{}を使うことで作成ができます。また、変数の宣言時に値を設定する場合には、(2)の通りにします。そして、値を追加する場合は、(3)のように[キー値]を使って追加が可能です。そして、値の取得は[]を使って行えます。
まとめ
今回は、Dart言語の基礎部分について紹介しました。JavaScriptやJavaのような言語と似ていると何度も言及していますが、言語の基本部分でもそれらの特徴を取り入れていると感じられます。
特に、言語仕様部分ではJavaScript部分よりも厳格にし、データなどの扱い方ではJavaのような厳格さを求めていません。これは、Dartと言う言語がUIを扱うための言語であって、必ずしも広い目的で使える汎用言語ではないためです。そのため、目的を満たす制限と使いやすさのための寛容さを、バランスよく反映できたものだと思います。
次回は、関数やクラスについて紹介します。関数やクラスの扱い方になると、Dart言語の特徴がより表れるので、今回紹介した内容を前提にしてもらえればと思います。
