SwiftエンジニアのためのDartのFunctionの任意引数

kitoko552.hatenablog.com

これのおまけ。Swiftエンジニア向け版です。

Swiftでの任意引数

Swiftではメソッドの引数を任意にしたい場合はデフォルト値を設定する。

// Swift

fun hoge(isFuga: Bool = false) {
    //  
}

hoge() // hoge(isFuga: false)と同義

Dartでの任意引数

Dartでは任意にしたい引数を{}または[]で囲む。

// Dart

void hoge({bool isFuga = false}) {
  //
}

void fuga([bool isFuga = true]) {
  //
}

hoge(); // hoge(isFuga: false)と同義。
fuga(); // fuga(true)と同義。

{}[]の違いは、引数を省略しない場合の書き方。
{}で囲むと呼び出し時に引数名を明記させることができて、[]で囲むと引数名を書くことを禁止することができる。

// Dart

void hoge({bool isFuga = false}) {
  //
}

void fuga([bool isFuga = true]) {
  //
}

hoge(isFuga: true); // isFugaの明記が必須
fuga(false); // isFugaを書いてはならない

Swiftで言う、

// Swift

fun hoge(isFuga: Bool = false) {
    //  Dartの{}
}

fun fuga(_ isFuga: Bool = true) {
    // Dartの[]
}

と同じようなもの。

Dartではデフォルト値は必須ではない

Swiftと違うのが、Dartはデフォルト値を指定しなくてもいいところ。指定しない場合はデフォルト値がnullになる。

// Dart

void hoge({bool isFuga}) {
  //
}

void fuga([bool isFuga]) {
  //
}

hoge(); // hoge(isFuga: null)と同義。
fuga(); // fuga(null)と同義。

Swiftで言う、

// Swift

fun hoge(isFuga: Bool? = nil) {
    //  Dartの{}
}

fun fuga(_ isFuga: Bool? = nil) {
    // Dartの[]
}

と同じような状態。

参考

www.dartlang.org