DartのFunctionで任意の引数をとる2種類の方法

はじめに

公式のLanguage Tourを読んだ方が正確です。特にOptional parameters章を。
この記事は日本語かつ自分の言葉で残したいが故の記事です。

DartのFunctionの基本

Dartでは普通にFunctionを定義するとその引数は必須になる。

String say(String from, String msg) {
  // 
}

say('Bob', 'Hello'); // 引数が2つないとエラー

Dartには引数をオプショナルにする方法が2種類ある。

Optional named parameters

{}で引数を囲むとその引数はオプショナルになるかつ呼び出し時に引数名の明記が必要になる(公式ではOptional named parametersと書いてある)。

String say({String from, String msg}) {
  // 
}

say(from: 'Bob', msg: 'msg'); // from, msgが必要になる
say() // 引数はオプショナルなので値を渡さなくてもOK

Optional positional parameters

[]で引数を囲むとその引数はオプショナルになる。Optional named parametersのように引数名を書く必要はないというか書いたらだめ(公式ではOptional positional parametersと書いてある)。

String say([String from, String msg]) {
  // 
}

say('Bob'); // 引数名はいらない。オプショナルなので値を渡さなくてもOK。この場合は一つ目の引数としてBobが使われる。

デフォルト値

Optional parametersにはデフォルト値を設定することができる。
named/positional関わらず、= valueを引数の後に書いて設定する。

String say({String from = 'Bob'}, [String msg = 'hello']) {
  // 
}

say(); // say(from: 'Bob', 'hello')と同義

参考

www.dartlang.org