どうも! 堕罪オサムです。
秋学期もただひたすらに国語学・日本語学を学んでいます。
さっそくですが本題に入ります。
ワイ「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 について調査しまとめてみました。
わからない箇所・問題についてしっかり向き合い、ひとつづつ紐解いて、わかっていない部分を洗い出すことの大切さを学びました。
「わからない!!」と投げ捨てるのではなく、「どこが・なにがわからないかがわからない」ではなく「ここがわからない」と疑問点を明白にすることで、実際教わるとき、質問するときに両者のコミュニケーションがスムーズになり問題解決もより良い形で進めることができると思います。これはプログラミングだけでなく身の回りのあらゆる事象にも有効であるはず。
頑張るぞ~。
ここまで読んでくださりありがとうございます!
また次回もよろしくお願いします!