今更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の開発環境入れてないです。
入手しないと・・・