Dartのfor-in文

Flutter/Dart

この記事では、Dartのfor-in文について書いていきます。

サンプル

var flybyObjects = ['Jupiter', 'Saturn', 'Uranus', 'Neptune'];
void main(){
for (final object in flybyObjects) {
  print(object);
}
}

書き方

for(リスト要素の型 変数名 in リスト){
   // 繰り返す処理
}

よく使うプロパティ

isEmpty / isNotEmpty(空かどうかの判定)

​「データが存在するときだけfor文を実行する」という安全策(ガード節)としてよく使われます。

void main(){
var users = ['Alice', 'Bob'];

if (users.isNotEmpty) {
  for (var user in users) {
    print(user);
  }
}
}

reversed(逆順)

​要素を後ろから順番に処理したい場合に便利です。

void main(){
var original = [1, 2, 3];
// 3, 2, 1 の順で処理される
for (var num in original.reversed) {
  print(num);
}
}

インデックス(添字)も一緒に使いたい時

​Dartのシンプルなfor-in文(for (var item in list))はインデックスが取れません。インデックスも同時に使いたい場合は、以下の方法(プロパティ・メソッド)をよく使います。

​asMap()

​Listを「インデックス(キー)と要素(値)」のMapに変換するプロパティです。これを使うと、for-inで両方を取り出せます。

void main(){
var fruits = ['リンゴ', 'バナナ', 'ミカン'];

for (var entry in fruits.asMap().entries) {
  print('${entry.key}番目は ${entry.value}');
}
// 出力: 0番目は リンゴ, 1番目は バナナ...
}

indexed (Dart 3.0以降でおすすめ!)

​Dart 3.0で追加された、今一番スマートな方法です。レコード(Record)を使って、インデックスと要素を同時に分解(デストラクト)しながらループ処理ができます。

void main(){
var fruits = ['リンゴ', 'バナナ', 'ミカン'];

for (var (index, fruit) in fruits.indexed) {
  print('$index: $fruit');
}
}

Map(連想配列)をfor文で回すときのプロパティ

​Mapをfor文で処理する場合は、どの部分をループさせたいかによってプロパティを使い分けます。

プロパティ用途
keysキー(Key)だけを順番に処理する
values値(Value)だけを順番に処理する
entriesキーと値のペア(MapEntry)を同時に処理する
void main(){
var scores = {'Math': 90, 'English': 85};

// entriesを使った例
for (var entry in scores.entries) {
  print('${entry.key}の点数は ${entry.value}点');
}
}

for文との違い

リスト(List)やセット(Set)などのコレクションに含まれるデータを、最初から最後まで順番に1つずつ取り出して処理したい場合に使います。カウンタ変数(iなど)の管理が不要なため、コードが直感的で読みやすくなります。

参考

Google Search

Flutter/Dart
スポンサーリンク
ten

はじめまして。ミルガイです。本サイトではFlutter/Dart・アニメ・パソコン関係に関して様々な記事を書いています。

tenをフォローする
tenをフォローする
タイトルとURLをコピーしました