Dart でデフォルト引数を使う
Dart でデフォルト引数を使いたくて、こんな感じで書いてみると The default value of an optional parameter must be constant.
というエラーが出てしまう。
class HogeClass { // The default value of an optional parameter must be constant. HogeClass({Object object = Object()}) : _object = object; final Object _object; }
どうやら const しかデフォルト引数に持てないっぽい。でも工夫すればデフォルト引数っぽいことは可能になる。
nullable で引数を設定する
nullable で引数を設定して、引数が null だったらクラス側で Object()
を作っている。これで実質デフォルト引数と同じことができる。
class HogeClass { HogeClass({Object? object}) : _object = object ?? Object(); final Object _object; } final hogeClass1 = HogeClass(); final hogeClass2 = HogeClass(object: Object());
これは Class のコンストラクタだが、メソッドでも同様のことができる。
たまに HogeClass({Object? object}) : _object = Object();と書いてしまって引数が設定されないが? とミスることがあるので注意。
Named constructor を使う (コンストラクタのみ)
https://dart.dev/guides/language/language-tour#named-constructors
Named constructor を利用することで複数のコンストラクタを用意できる。
class HogeClass { HogeClass(this._object); HogeClass.noArgs() : _object = Object(); final Object _object; } var hogeClass1 = HogeClass(Object()); var hogeClass2 = HogeClass.noArgs();
この書き方だとコンストラクタで何か処理をする場合、2箇所に処理を書かなければならなくなる。
class HogeClass { HogeClass(this._object) { print(_object); } HogeClass.noArgs() : _object = Object() { print(_object); } final Object _object; }
おわり
2箇所に処理を書きたくないので nullable を使ってデフォルト引数を利用するのが良さそう。