つてとのブログ

【Dart言語基礎】抽象クラスや継承など最低限の文法をまとめた【Flutter開発】

こんにちは、たちつてとです。

引き続きFlutter開発しています。

どうもDartというやつは、java言語で勉強した書き方も

あるようで、地味〜にその知識が役立ってます。

 

以下、よくあるサンプルにもあるような必須知識っぽい、

かつ僕もわからなかったものを書きました。

 

【Dart/Flutter開発基礎】クラスについての最低限の知識を書く。な話【オブジェクト指向】では、クラスに関する知識をまとめました。

super

const MyApp({Key? key}) : super(key: key);

↑super:クラス継承とセットで、親クラスにパラメータを渡しています。

文法的には

子クラス名(子パラメータ名) : super(親パラメータ名:子パラメータ名)

という構文。

なお、

MyApp({Key? key}) 

なんですが、Keyという型は別途クラスとして宣言されていて、

そのクラス型のkeyというパラメータという具合になります。

自分で作ったクラス型の変数も作れると。(うわあ...javaであったっけか...)

Key?の「?」はnull許容型です。その変数にnullを入れることができるか。

非許容型(Key?の「?」がない宣言)でのkey = null;という代入はエラーとなります。

 

return の書き方

  Widget build(BuildContext context) {
//MaterialAppを返却
return MaterialApp();
}

{return A;}は

=> Aって書いていいみたい。つまり、

Widget build(BuildContext context) => MaterialApp();

ってこと。なお、ここでもWidget型やBuildContext型が出てきてますね。

stringとかintなどの基本型とは違った奴らです。

(正直細かいところまでは把握してないんですが)

この意味では、存在というか区分的なものは、上記のKey型に近いんじゃないか

と思います。

 

required

Sample({Key? key, required this.title})

もともと@requiredって書き方でした。必須(和訳まんま...)というイメージ。

忘れずに入れたいパラメータにつけときましょう。

 

なお、(この例でいうSample)クラスを新たに

宣言というか生成するとき、

requiredがあるプロパティには、

しっかり値を渡さないとエラーとなります。

 

だめな例

 var sample = Sample();

良い例

 var sample = Sample(title: "タイトル");

 

abstract class(抽象クラス)

class Sample extends StatefulWidget {
@override
State<Sample> createState() => _Sample();
}
class _Sample extends State<Sample> {
}

ここではStatefulWidgetを例に挙げます。

「extends A」というのは、Aのというクラスを継承していることになります。

今、AはStatefulWidgetクラスなんですが、これ、名前だけで実体がないクラスです。

なんぞ???って感じかもですが、

int increment(int i){

 return i++;

}

↑普通メソッドとかってこんな感じで中身がありますよね?

抽象クラスでないクラスを継承したら、(例えば)incrementというメソッドを

普通に利用することができます。

 

しかし、抽象クラスの場合、

具体的な記述がありません。

 

この例では、createState()というメソッドという名前は、StatefulWidgetのクラスに定義

されてるんですが、具体的にどんな処理をするかが決められていません。

で、その代わりに、自分でcreateState()の中身を定義しろというルールになってます。

 

そんなわけで、@overrideってやつの下に定義してあります。

overrideというのは上書きという意味になります。親クラス独自のメソッドを

子クラスが継承し新たに定義しています。

 

抽象(クラスの抽象)メソッドに戻り値の型が宣言されているなら(↑incrementの例のように)

それに合わせて戻り値が必要です。この例でも、createState()の戻り値はState型なので

State<Sample> createState() => _Sample();

のように、

class _Sample extends State<Sample> {}

_SampleというState型を返却するように定義しています(「=>」returnの意味です)。

 

ファイル名の注意

Do name source files using lowercase_with_underscores.

と言われた。

何かというと、ファイル名に大文字を使わないで、という。

underscores='_'と小文字で構成してねとのこと。

 

はい、文法的な話(+α)終わり。いい勉強にはなった...

次回は、文法じゃなくUIとかの話を勉強できるフェイズになってたらいいな...。

 

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Flutter モバイルアプリ開発バイブル [ 南里勇気 ]
価格:3509円(税込、送料無料) (2021/9/20時点)