質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

1回答

358閲覧

Classの配列が上手く参照出来ません

Wind

総合スコア442

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2021/10/05 01:43

編集2021/10/05 04:05

#わからない事
Classの配列を宣言し、実行したところ同じ場所を参照していました。
Class配列の宣言の方法を教えて頂けないでしょうか?

#ソースコード

Dart

1class ClassTest { 2 ClassTest({this.a = 0, required this.csSub}); 3 late int a; 4// late final int a; 5 late ClassTestSub csSub; 6} 7 8class ClassTestSub { 9 ClassTestSub({this.b = 0}); 10 late int b; 11}

Dart

1 final cs = List<ClassTest>.filled(10, ClassTest(csSub: ClassTestSub())); 2// final cs = List<ClassTest>.generate(10, (index) => ClassTest(csSub: ClassTestSub())); 3 final c = List<int>.filled(10, 0); 4 for(int i=0;i<10;i++){ 5 cs[i].a = i; 6 cs[i].csSub.b = i; 7 c[i] = i; 8 } 9 print('テスト表示'); 10 print(cs[0].a); 11 print(cs[0].csSub.b); 12 print(c[0]); 13 // 想定:a=0, b=0, c=0 14 // 実際:a=9, b=9, c=0(cs[0]を常に参照している?)

#結果

  • 想定(やりたかった事)

a=0~9, b=0~9, c=0~9

  • 実際(やってみた結果)

a=9~9, b=9~9, c=0~9

#試した事
finalやgenerateを使用してみました、エラーで停止してしまいました。

#環境
Flutter:2.2.3
Dart:2.13.4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2021/10/05 04:31

generateの方で何か問題ありましたか?
Wind

2021/10/05 05:19

コメントにしたgenerateの方で無事に動作しました。 何か勘違いをしていた様です、ありがとうございます。 公式を読んでもfilledとgenerateの違いが明確にわかりませんでしたが、List<int>もfilledでは無くgenerateにした方が良いのでしょうか?
guest

回答1

0

ベストアンサー

filledは「この値でn個埋めろ」です
何が起きているかは一時変数で置き換えるとわかりやすいかもしれません

dart

1final c = ClassTest(csSub: ClassTestSub()); 2final cs = List<ClassTest>.filled(10, c);

対してgenerateは、「この関数をn回実行して各結果を要素にしろ」です。
(index) => ClassTest(csSub: ClassTestSub())を10回実行してそれぞれの結果を要素にしているので各要素のClassTestのインスタンスは独立しています。

投稿2021/10/05 05:33

ozwk

総合スコア13532

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Wind

2021/10/05 06:04

丁寧な解説ありがとうございます。 filledで関数を10個作ったつもりでも実際は独立していないので、同じ関数を10回参照してしまいおかしくなっていたのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問