DartにおけるCollections、lists、maps、queues、setsの使い方についてソースコード付きでまとめました。
【Collections】lists、maps、queues、sets
Collections、objectを格納するAPIで、lists、maps、queues、setsの4種類があります。
lists
一般的なリスト型オブジェクトです。
順番があり、indexからデータの操作(参照、検索、追加、削除など)が可能です。
import 'dart:collection'; void main() { // リストの定義 var names = ['savar', 'archer', 'lancer']; // 0番目の要素を参照 print(names[0]); // savar // 要素を追加 names.add('caster'); // 要素数(配列の長さ)を参照 names.length == 4; // aから始まる要素を取得 names.where((f) => f.startsWith('a')).toList(); }
maps
一般的には、連想配列や辞書型と呼ばれるものです。
key(キー)とvalue(値)を持っており,keyによってデータの操作(参照、検索、追加、削除など)が可能です。
keyにはnull以外のオブジェクトを利用できます。
import 'dart:collection'; void main() { var item = { 'first': 1, // Key: Value 'second': 2, 'fifth': 3 }; }
queues
queuesはlistsと同じく順番があり、最初と最後に追加もしくは削除できます。
しかしindexがないため、真ん中の要素は触ることができません。
sets
要素の順序はないが、要素は同じ値を複数入れることができません。
要素の値を被らせたくない場合に使用します。
【オブジェクト指向】クラス
コンストラクタ
コンストラクタ(初期化メソッド)を定義するには、クラス名と同じ関数を定義します。
class MyClass { num x, y; MyClass(num x, num y) { this.x = x; this.y = y; } } void main() { var my = MyClass(10, 20); print(my.x); // 10 }
名前付きコンストラクタを定義してクラスのコンストラクタを複数定義できます。
class Point { num x, y; Point(this.x, this.y); // 名前付きコンストラクタを定義 Point.origin() { x = 0; y = 0; } }
スーパークラスのコンストラクタ、名前付きコンストラクタはサブクラスには継承されないため、サブクラスで名前付きコンストラクタを使用する場合はそのコンストラクタをサブクラスに実装する必要があります。
インスタンス変数の初期化
コンスタラクタの実行前にインスタンス変数を初期化できます。
// 名前付きコンストラクタ MyClass.fromJson(Mapjson) : x = json['x'], y = json['y'] { print('In Point.fromJson(): ($x, $y)'); // :でイニシャライザを区切る }
getter/setter
getter/setter(ゲッター/セッター)を定義されたクラスのメンバーは、あたかもメンバー変数と同じようにアクセスでき、さらにほかの処理を追加することもできます。
つまり、オブジェクトのプロパティへの読み書きアクセスを提供するメソッドです。
それぞれのインスタンス変数には暗黙的にゲッターとセッターがありますが、getキーワードとsetキーワードを使用してgetter,setterを実装することもできます。
class MyClass { num x, y, w, h; MyClass(this.x, this.y, this.w, this.h); num get right => x + w; set right(num value) => x = value - w; num get bottom => y + h; set bottom(num value) => y = value - h; }
クラス変数/クラスメソッド
staticキーワードを使用してクラス変数、クラスメソッド(静的変数、静的メソッド)を定義できる
class MyClass { num x, y; MyClass(this.x, this.y); static num myMethod(MyClass w, MyClass h) { //... } } void main() { var my = MyClass.myMethod(w, h); }
ライブラリの使用
importキーワードでライブラリを読み込むことができます。
また、Pythonと同じくasを用いることで接頭語を指定できます。
import 'package:lib1/mylib1.dart'; import 'package:lib2/mylib2.dart' as lib2; Element element1 = Element(); lib2.Element element2 = mylib2.Element();
コメント