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

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

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

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

Dart

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

Q&A

解決済

2回答

562閲覧

初歩的なコードの考え方を教えてください

mako_0221

総合スコア87

Flutter

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

Dart

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

1グッド

0クリップ

投稿2022/03/24 08:45

Flutter X Dartの初学者です。
そもそもDartの記法がわからずに、参考書を読んでいるのですが、不慣れなため、それぞれ例えばどのように解釈したらいいか細かい点がまだわかりません。
これは書籍が悪いというよりは、私の根本的な理解で、それを補う方法がわからず、一旦ご質問させていただきました。その結果、さらに入門でその手のことなら、「これから読むべきだよ」というものがあれば、それをご推奨いただいてもありがたいです。

dart

1 2class MyApp extends StatelessWidget{ 3 4 Widget build (BuildContext context) { 5 return MaterialApp( 6 home: Scaffold( 7 appBar: AppBar( 8 title: Text("Title"), 9 ), 10 body: Center( 11 child: Text("Hello World"), 12 ), 13 ), 14 ); 15 } 16}
  1. Widget build(BuildContext context)

ここでのWidgetはclassであるという理解であっていますか? class method のような書き方が見慣れないため、少し理解ができなかった部分です。

  1. build()

これは、何のクラスに属するメソッドであり、BuildContext context はその引数であると捉えて問題ないでしょうか?私の知っているクラスとメソッドは例えば、class.method(arg)のような書き方であるため、上記の#1の書き方を含めて、記法として戸惑っております。

  1. MaterialApp()

これもクラスであるという理解で正しいでしょうか?こちらを、見る限りはクラスのように思えます。ただ、これはconst inst = New Car(arg)のようなインスタンス化してクラスを利用するような記法とはまるで違うので戸惑っています。Widget build()内でreturnしているということは、その場でインスタンス化して得られた結果をreturnしているようなkanngaekatananodesyouka?

  1. XX:YY

このような記法におけるXXはそれが属するクラスや承継した親クラスのプロパティにYYを設定していると読めるのですが、正しいでしょうか?

稚拙な質問方法で誠に申し訳ございませんが、できる限り振り絞ってご質問させていただきました。

よろしくお願い申し上げます。

hoshi-takanori👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

Widget build(BuildContext context)

関数(この場合はメソッド)定義です。「戻り値の型 関数名(引数)」です。

build()

はい。MyApp クラスのメソッドです。「class.method(arg)のような書き方」は、メソッドを使うときの書き方で、ここではメソッドを定義しています。

MaterialApp()

MaterialApp クラスのコンストラクタの呼び出しです。Dart では new が省略可能です。

XX:YY

名前付き引数です。

投稿2022/03/24 09:24

int32_t

総合スコア20882

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

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

mako_0221

2022/03/24 13:17

ご丁寧にありがとうございます。 概ね自身が大きく誤解していたことや、コード全体がどのようにしたいのかを漠然と掴むことができました。 最後については、明らかに私の質問方法に問題があったのですが、XX:YYはコード中のAppBar(title: Text("Title"))におけるtitle:Text()の関係のため、super(key: key)のような名前付き引数のことではなく、大変失礼致しました。 また、BuildContext contextの正体はわからなかったのですが、文中でご紹介のあったdartのdocsを見ながら勉強をして行ってみたいと思います。何となく、読み進めていると、BuildContext型のcontext変数であるということが、少しわかりました。もう少し、丁寧に学んでみます https://dart.dev/guides/language/language-tour#named-parameters
mako_0221

2022/03/24 13:27

申し訳ございません、確かにそのようにも記載があるのですが、以下のdocsのPropertiesの一覧を見ると https://api.flutter.dev/flutter/material/AppBar-class.html title → Widget? The primary widget displayed in the app bar. [...] final とも記載があり、title:はクラスのプロパティであるようにも読めるのですが、誤認でしょうか?
int32_t

2022/03/24 13:43

コンストラクタを呼ぶ時点ではまだ AppBar オブジェクトは存在しないわけですから、プロパティも何もありません。意味としてはプロパティになる値を指定しているのでしょうが、文法上はプロパティは関係なく名前付き引数です。
mako_0221

2022/03/24 13:59

ありがとうございます、そのような前提で理解して公式ドキュメントを読み進めて参ります。 お力添えに、強く感謝をいたします。
guest

0

「これから読むべきだよ」

https://dart.dev/guides/language/language-tour

これが基本だと思います。

英語なんですが、他の言語(私はC++/C#等を知ってますが)を知ってれば、日本語翻訳して読めばある程度の意味は理解できると思います。

Widget build(BuildContext context)
build()

メソッドが参考になるかと思います。
でこのメソッドではBuildContext contextを引数にWidgetを返す定義になってます。

MaterialApp()

コンストラクタ
上のリンクのちょっと下にnewについての記述もあります。

で、この部分はMaterialApp()のオブジェクトを作成しreturnで返しているということで合ってます。

投稿2022/03/24 13:13

ta.fu

総合スコア1667

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

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

mako_0221

2022/03/24 13:23 編集

コメントありがとうございます。 int32_t様へのコメントにも記載致しましたが、まさに私が今進めることはDart公式のdocsを読んでいくことであると理解いたしました。NativePHPから入り、クラスやオブジェクト指向にまだまだ慣れていなく、一つずつ躓きながらになりますが、何とか食らいついていこうと思います。 そのような知識と経験の状況なので、実は「MaterialApp()のオブジェクトを作成しreturnで返している」というのは直感的に理解はできるのですが、これを「コンストラクタ」という言葉を使って正しく自分で説明せよというと、怪しいところなので、丁寧に読み進めたいと思います
mako_0221

2022/03/24 13:32

例えば、イメージとして const _hoge = new MaterialApp( // something ) return _hoge; であれば、MaterialApp()はコンストラクタで、_hogeのインスタンスを作成しており、returnでそのオブジェクトを返しているというように理解できるのですが、如何でしょうか? 読み進めるのですが、int32_t様からもnewは省略できるというコメントがあったので、少し気になり加筆してしましました。。。。
ta.fu

2022/03/24 23:33

変数に代入して、変数をリターンするという書き方でも問題はないと思います。 ただ代入した変数に対して何か処理をする必要がなければ、わざわざ変数に代入する必要性がないわけで、結果として質問のところに記述した実装に落ち着くわけです。 このような書き方はDartに限らず、他の言語、C++やC#でも普通に行われることです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問