目次

コレクション

Dartは、リスト、セット、マップのコレクションを組み込みでサポートしています。コレクションに含まれる型の構成について詳しくは、ジェネリクスをご覧ください。

リスト

#

ほぼすべてのプログラミング言語で最も一般的なコレクションは、おそらく*配列*、つまりオブジェクトの順序付けられたグループです。Dartでは、配列はListオブジェクトなので、ほとんどの人は単に*リスト*と呼んでいます。

Dartのリストリテラルは、角かっこ(`[]`)で囲まれた、カンマで区切られた式または値のリストで表されます。単純なDartリストの例を次に示します

dart
var list = [1, 2, 3];

Dartコレクションリテラルの最後の項目の後にカンマを追加できます。この*末尾カンマ*はコレクションには影響しませんが、コピーペーストエラーを防ぐのに役立ちます。

dart
var list = [
  'Car',
  'Boat',
  'Plane',
];

リストはゼロベースのインデックスを使用します。0は最初の値のインデックス、`list.length - 1`は最後の値のインデックスです。`.length`プロパティを使用してリストの長さを取得し、添え字演算子(`[]`)を使用してリストの値にアクセスできます

dart
var list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);

list[1] = 1;
assert(list[1] == 1);

コンパイル時定数であるリストを作成するには、リストリテラルの前に`const`を追加します

dart
var constantList = const [1, 2, 3];
// constantList[1] = 1; // This line will cause an error.

リストについて詳しくは、`dart:core`ドキュメントの「リスト」セクションをご覧ください。

セット

#

Dartのセットは、一意の項目の順序付けられていないコレクションです。Dartのセットのサポートは、セットリテラルとSet型によって提供されます。

セットリテラルを使用して作成された、単純なDartセットの例を次に示します

dart
var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};

空のセットを作成するには、型引数の前に`{}`を使用するか、`{}`を`Set`型の変数に代入します

dart
var names = <String>{};
// Set<String> names = {}; // This works, too.
// var names = {}; // Creates a map, not a set.

`add()`または`addAll()`メソッドを使用して、既存のセットに項目を追加します

dart
var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);

`.length`を使用して、セット内の項目数を取得します

dart
var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);
assert(elements.length == 5);

コンパイル時定数であるセットを作成するには、セットリテラルの前に`const`を追加します

dart
final constantSet = const {
  'fluorine',
  'chlorine',
  'bromine',
  'iodine',
  'astatine',
};
// constantSet.add('helium'); // This line will cause an error.

セットについて詳しくは、`dart:core`ドキュメントの「セット」セクションをご覧ください。

マップ

#

一般に、マップはキーと値を関連付けるオブジェクトです。キーと値はどちらも任意の型のオブジェクトにすることができます。各*キー*は1回だけ出現しますが、同じ*値*を複数回使用できます。Dartのマップのサポートは、マップリテラルとMap型によって提供されます。

マップリテラルを使用して作成された、2つの単純なDartマップの例を次に示します

dart
var gifts = {
  // Key:    Value
  'first': 'partridge',
  'second': 'turtledoves',
  'fifth': 'golden rings'
};

var nobleGases = {
  2: 'helium',
  10: 'neon',
  18: 'argon',
};

Mapコンストラクタを使用して同じオブジェクトを作成できます

dart
var gifts = Map<String, String>();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';

var nobleGases = Map<int, String>();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';

添え字代入演算子(`[]=`)を使用して、既存のマップに新しいキーと値のペアを追加します

dart
var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds'; // Add a key-value pair

添え字演算子(`[]`)を使用して、マップから値を取得します

dart
var gifts = {'first': 'partridge'};
assert(gifts['first'] == 'partridge');

マップに存在しないキーを検索すると、`null`が返されます

dart
var gifts = {'first': 'partridge'};
assert(gifts['fifth'] == null);

`.length`を使用して、マップ内のキーと値のペアの数を取得します

dart
var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds';
assert(gifts.length == 2);

コンパイル時定数であるマップを作成するには、マップリテラルの前に`const`を追加します

dart
final constantMap = const {
  2: 'helium',
  10: 'neon',
  18: 'argon',
};

// constantMap[2] = 'Helium'; // This line will cause an error.

マップについて詳しくは、`dart:core`ドキュメントの「マップ」セクションをご覧ください。

演算子

#

スプレッド演算子

#

Dartは、リスト、マップ、セットリテラルで**スプレッド演算子**(`...`)と**Null対応スプレッド演算子**(`...?`)をサポートしています。スプレッド演算子は、コレクションに複数の値を挿入するための簡潔な方法を提供します。

たとえば、スプレッド演算子(`...`)を使用して、リストのすべての値を別のリストに挿入できます

dart
var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);

スプレッド演算子の右側の式がnullになる可能性がある場合は、Null対応スプレッド演算子(`...?`)を使用して例外を回避できます

dart
var list2 = [0, ...?list];
assert(list2.length == 1);

スプレッド演算子の使用方法の詳細と例については、スプレッド演算子の提案をご覧ください。

制御フロー演算子

#

Dartは、リスト、マップ、セットリテラルで使用するための**collection if**と**collection for**を提供しています。これらの演算子を使用して、条件(`if`)と反復(`for`)を使用してコレクションを作成できます。

**collection if**を使用して3つまたは4つの項目を含むリストを作成する例を次に示します

dart
var nav = ['Home', 'Furniture', 'Plants', if (promoActive) 'Outlet'];

Dartは、コレクションリテラル内でもif-caseをサポートしています

dart
var nav = ['Home', 'Furniture', 'Plants', if (login case 'Manager') 'Inventory'];

**collection for**を使用して、リストの項目を別のリストに追加する前に操作する例を次に示します

dart
var listOfInts = [1, 2, 3];
var listOfStrings = ['#0', for (var i in listOfInts) '#$i'];
assert(listOfStrings[1] == '#1');

collection `if`と`for`の使用方法の詳細と例については、制御フローコレクションの提案をご覧ください。