今更Dartのメソッドオーバーロード/名付きコンストラクタの話
以前から書こう書こうと思っていた内容を少し。
以下、公式サイトのArticles、diomatic Dartより。
Named constructors
Like most dynamically-typed languages, Dart doesn't support overloading. With methods, this isn't much of a limitation because you can always use a different name, but constructors aren't so lucky. To alleviate that, Dart lets you define named constructors
拙い英語力でなんとか読み進めている感じですが、ようはDartではメソッドのオーバーロードを認めていないという事が書かれているようです。
つまり、次のような書き方はできません。
class Foo{ foo() => print("foo"); foo(var str) => print(str); //エラー } main(){ Foo myFoo = new Foo(); myFoo.foo("Bar"); }
Javaではわりと使うので、少々不満があるのですが、Googleは安全策を取ったみたいですね。
"you can always use a different name"
ようは、もっと適切な名前を付けることができるでしょ?という事です。
ただし、コンストラクタがオーバーロードできないのは初期化の際に困ります。これに対して、Dartでは"Named constructors"というのを定義しています(自分は便宜上「名付きコンストラクタ」と呼んでます)
class Student{ var name; Student() : name = "No Name"; Student.name(this.name); } main(){ Student NoName = new Student(); Student Yamada = new Student.name("Yamada"); print(NoName.name); print(Yamada.name); }
実行結果:
No Name Yamada
実は、未だにちゃんとしたDartの開発環境入れてないです。
入手しないと・・・