📄

Iterable collections②

2024/05/03に公開

Example: Using any() and every()

https://dart.dev/codelabs/iterables#what-are-collections
前回の記事の続きですが、Iterable collectionsについて学習してみましょう。

https://zenn.dev/joo_hashi/articles/ad53c5d3bdd864

Iterable クラスには、条件を検証するために使用できる 2 つのメソッドが用意されています。

  1. any(): 少なくとも 1 つの要素が条件を満たす場合に true を返します。
  2. Every(): すべての要素が条件を満たす場合に true を返します。
    この演習を実行して、実際の動作を確認してください。

[公式のコード]

void main() {
  const items = ['Salad', 'Popcorn', 'Toast'];

  if (items.any((item) => item.contains('a'))) {
    print('At least one item contains "a"');
  }

  if (items.every((item) => item.length >= 5)) {
    print('All items have length >= 5');
  }
}

[log]

At least one item contains "a"
All items have length >= 5

Exited.

もし小文字 a を含んでいなかったら?

void main() {
  const items = ['ttt', 'fff', '8888'];

  if (items.any((item) => item.contains('a'))) {
    print('小文字のアルファベット "a" を含むアイテムがあります。');
  } else {
    print('小文字のアルファベット "a" を含むアイテムがありません。');
  }

  if (items.every((item) => item.length >= 5)) {
    print('全てのアイテムの文字数が 5 文字以上です。');
  } else {
    print('全てのアイテムの文字数が 5 文字以上ではありません。');
  }
}

[log]

小文字のアルファベット "a" を含むアイテムがありません。
全てのアイテムの文字数が 5 文字以上ではありません。

Exited.

Flutterで使った例を考えてみた

検索すると特定の文字a. oと言ってキーワードが含まれているものだけ取り出すビジネスロジックを作ってみました。

import 'package:flutter/material.dart';

class IterableView extends StatefulWidget {
  const IterableView({Key? key}) : super(key: key);

  
  State<IterableView> createState() => _IterableViewState();
}

class _IterableViewState extends State<IterableView> {
  Iterable<String> allItems = ["tomato", "potato", "onion", "carrot", "cabbage"];
  List<String> items = [];
  String searchQuery = '';

  void searchItems(String value) {
    setState(() {
      searchQuery = value;
      if(allItems.any((element) => element.contains(value))) {
        items = allItems.where((element) => element.contains(value)).toList();
      } else {
        items = ["No items found"];
      }
    });
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Iterable View'),
      ),
      body: Center(
        child: Column(children: [
          Text("List of items:${items}"),
          TextField(
            onChanged: (value) {
              searchItems(value);
            },
          ),
          if (searchQuery.isNotEmpty)
            Expanded(
              child: ListView.builder(
                itemCount: items.length,
                itemBuilder: (context, index) {
                  return ListTile(
                    title: Text(items.elementAt(index)),
                  );
                },
              ),
            ),
        ],),
      ),
    );
  }
}

[run code]

main.dart
import 'package:flutter/material.dart';
import 'package:widget_cookbook/record_list/iterable_view.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: IterableView(),
    );
  }
}

[実行結果]
この場合だと、aが含まれている値をリストから取り出します。


まとめ

Iterableの文法の学習と、Flutterでビジネスロジックを作るのをやってみました。使い方はまだまだ多く存在するので、ゆっくり勉強しようと思います。

Discussion