Swift 関数には、パラメータ名の無いシンプルな関数から、引数ラベルや各種パラメータがあるメソッドまで表現できる柔軟性があります。
パラメータは、関数の呼び出しを簡略化するためのデフォルト値を持つことができ、関数が実行を完了したときに渡された変数を変更する入出力パラメータとして渡すことができます。
今回は、以下の観点でSwiftの関数のパラメータの指定方法について丁寧に解説します。
- Swiftの関数のパラメータについて
- 引数ラベルを指定する場合
- 引数ラベルを省略する場合
- デフォルトのパラメータ値
- 可変長パラメータを使用する場合
- 入出力パラメータを使用する場合
参考本
[改訂新版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 WEB+DB PRESS plus
Swiftの関数のパラメータについて
Swiftの関数のパラメータには、引数ラベルとパラメータ名があります。
引数ラベルは、関数呼び出し時の引数に使用します。
パラメータ名は、関数の実装で使用します。
引数ラベルが指定されていない場合、パラメータ名が引数レベルになります。
関数のパラメータはデフォルトで定数です。
関数のパラメータの値をその関数の本体内で変更しようとすると、コンパイル時エラーになります。
つまり、誤ってパラメータの値を変更してしまうことはありません。
それでは、具体的にSwiftの関数のパラメータの指定方法について見ていきましょう。
引数ラベルを指定する場合
以下の例のように、引数ラベルは、パラメータ名の前にスペースで区切って指定することができます。
//処理
}
以下の例のように、引数ラベルを使用することで、関数の本体を読みやすく、意図を明確に維持したまま、表現力のある文章のように関数を呼び出すことができます。
return “Hello \(person)! Glad you could visit from \(hometown).”
}
print(greet(person: “Bill”, from: “Cupertino”))
// “Hello Bill! Glad you could visit from Cupertino.”と出力
引数ラベルを省略する場合
もし、パラメータに対して引数ラベルが必要ない場合、以下の例のように、アンダースコアを指定することで省略することができます。
//処理
}
someFunction(1, secondParameterName: 2)
パラメータが何らかの引数ラベルを持つ場合、必ず引数ラベルを指定する必要があります。
パラメータのデフォルト値を指定する場合
パラメータの型の後に続けて値を代入することで、関数のどのパラメータにでもデフォルト値を定義することができます。
デフォルト値が定義されている場合、関数を呼び出すときにそのパラメータを省略することができます。
// 関数の呼び出しに引数が渡されていない場合、
// parameterWithDefault の値は 12
}
someFunction(6) // parameterWithDefault は 6
someFunction() // parameterWithDefault は 12
可変長パラメータを使用する場合
可変長(可変個)パラメータは、指定された型の値を 0 個以上受け取ります。
関数を呼び出すときに、可変数の入力値を渡すことができるパラメータを指定するために、可変長パラメータを使用します。
パラメータの型名の後にピリオドを 3 文字 (…) 挿入して可変長パラメータを記述します。
可変長パラメータに渡された値は、しかるべき型の配列として関数の本体内で使用できます。
例として、名前が numbers で型が Double… の可変長パラメータは、型が [Double] の配列の定数 numbers として関数の本体内で使用できます。
var total: Double = 0
for number in numbers {
total += number
}
return total / Double(numbers.count)
}
arithmeticMean(1, 2, 3, 4, 5)
// 5 つの数値の算術平均である 3.0 を返す
入出力パラメータを使用する場合
関数のパラメータの値を変更したい、かつ関数が終了した後もその変更を存続させたい場合には、そのパラメータを入出力パラメータとして定義します。
入出力パラメータを記述するには、そのパラメータのはじめに inout キーワードを置きます。
入出力パラメータは関数に渡される値で、関数によって変更され、もとの値を置き換えるために関数の外に戻されます。
なお、入出力パラメータがデフォルト値を持つことはできません。
また、可変長パラメータに inout を付けることはできません。
let temporaryA = a
a = b
b = temporaryA
}
入出力パラメータには、引数として変数のみ渡すことができます。
定数とリテラルは変更することができないため、引数として定数またはリテラル値を渡すことはできません。
入出力パラメータに引数として渡すとき、関数によって変更されることを示すアンパサンド (&) を変数名の前に置きます。
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)
print(“someInt is now \(someInt), and anotherInt is now \(anotherInt)”)
// “someInt is now 107, and anotherInt is now 3” と出力
今回は、Swiftの関数のパラメータの指定方法について解説しました。
[…] Swiftの関数 Swiftの関数のパラメータ Swiftの関数のネスト を参照してください。 参考本 […]