LoginSignup
0
0

俺、Dartの.mapについて理解を深めてみようと思ったんだ。

Last updated at Posted at 2023-09-24

どうも! 堕罪オサムです。
秋学期もただひたすらに国語学・日本語学を学んでいます。

さっそくですが本題に入ります。

ワイ「Flutterのチュートリアルでmemoあたりのものを並べるために.mapっていうのを使ったけど、理解浅いな~。どう動いてるのか正直よくわからん。」

勉強不足ですね。
なので今回は

「【Flutter】わかんないよ!オブジェクト指向なんてわかんないよ!」という以前の記事で、「書いたコードはコチラ!」 の最後のほうにある、

SizedBox(
  height: 200,
  width: double.infinity, // メモデータを左寄せ
  child: ListView(
    children: _memoList.map((memo) => ListTile(
      leading: const Icon(Icons.fiber_manual_record),
      title: Text('Item: $memo'),
    )).toList(),
  ),
)

というコードでの利用方法を通じてFlutter/Dart/mapメソッドへの理解を深めたいと思います。

.mapについて

mapメソッド(.map) はDartのList型のメソッドです。mapメソッドのあとにはtoList() を付けます。
toList() を使用することで、.mapメソッドの結果をリストとして扱えます。

ChatGPTに聞いてみた

ChatGPT「.mapメソッドは、リストやイテラブルなコレクション内の各要素に対して指定した関数を適用し、新しいコレクションを生成します。このメソッドは、コレクション内の要素を変換するのに使用されます。

var numbers = [1, 2, 3, 4];
var doubledNumbers = numbers.map((number) => number * 2);
// doubledNumbersは[2, 4, 6, 8]となる

.mapメソッドは、要素を変換するだけで、キーと値のペアを操作するわけではありません。通常、リスト内の要素に対する変換を行う場合に使用されます。

キーと値についての記載がありますが、それはMap型との違いについてです。

なるほど、[1, 2, 3, 4]というnumbersを.mapの中でnumber * 2 (それぞれに2を掛ける)という処理をして、それをdoubleNumbersに入れてるのか。

ChatGPTのコードとの比較

では、前回のチュートリアルでやったものを同じように見てみます。

_memoList
   .map((memo) => ListTile(
      leading: const Icon(Icons.fiber_manual_record),
      title: Text('Item $memo'),
   ))
   .toList()

ワイ「メモの情報が入っている_memoList.mapを使ってListTileウィジェットに変換する。
leadingプロパティはアイコン指定で~……。
titleプロパティはText('Item $memo')で、要するにテキストで「Item (メモの内容)」という形式で表示されるということ。
で、最後にお決まりの.toList()をつける。おお!仕組みがわかりやすくなった!」

終わりに

今回は .map について調査しまとめてみました。
わからない箇所・問題についてしっかり向き合い、ひとつづつ紐解いて、わかっていない部分を洗い出すことの大切さを学びました。
「わからない!!」と投げ捨てるのではなく、「どこが・なにがわからないかがわからない」ではなく「ここがわからない」と疑問点を明白にすることで、実際教わるとき、質問するときに両者のコミュニケーションがスムーズになり問題解決もより良い形で進めることができると思います。これはプログラミングだけでなく身の回りのあらゆる事象にも有効であるはず。
頑張るぞ~。

ここまで読んでくださりありがとうございます!
また次回もよろしくお願いします!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0