【Dart言語基礎】抽象クラスや継承など最低限の文法をまとめた【Flutter開発】
こんにちは、たちつてとです。
引き続きFlutter開発しています。
あるようで、地味〜にその知識が役立ってます。
以下、よくあるサンプルにもあるような必須知識っぽい、
かつ僕もわからなかったものを書きました。
【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とかの話を勉強できるフェイズになってたらいいな...。
|