関数のパラメータには、外部パラメータ名とローカルパラメータ名があります。外部パラメータ名は、関数呼び出し時の引数に使用します。ローカルパラメータ名は、関数の実装で使用します。
func someFunction(firstParameterName: Int, secondParameterName: Int) {
// 1 つ目と 2 つ目のパラメータの引数値を
// firstParameterName と secondParameterName で参照
}
someFunction(1, secondParameterName: 2)
デフォルトでは、1 つ目のパラメータは外部名を省略し、2 つ目以降のパラメータは外部名としてローカル名を使用します。すべてのパラメータのローカル名をユニークにする必要があります。複数のパラメータを同じ外部名にすることは可能ですが、ユニークな外部名とするほうがコードは読みやすくなります。
外部パラメータ名を指定
ローカルパラメータ名の前をスペースで区切って外部パラメータ名を記述します。
func someFunction(externalParameterName localParameterName: Int) {
// パラメータの引数値を localParameterName で参照可能
}
関数 sayHello(_:)
の次のバージョンは、2 人の名前を受け取り、双方に向けての挨拶を返します。
func sayHello(to person: String, and anotherPerson: String) -> String {
return "Hello \(person) and \(anotherPerson)!"
}
print(sayHello(to: "Bill", and: "Ted"))
// "Hello Bill and Ted!" と出力
両パラメータに外部パラメータ名を指定することで、関数 sayHello(_:)
の 1 つ目と 2 つ目の引数共に、呼び出すときにラベルを付ける必要があります。
外部パラメータ名を使用することで、関数の本体を読みやすく、意図を明確に維持したまま、表現力のある文章のように関数を呼び出すことができます。
外部パラメータ名を省略
関数の 2 つ目以降のパラメータに外部名を使用したくない場合には、明確な外部名ではなくアンダースコア (_
) をパラメータに記述します。
func someFunction(firstParameterName: Int, _ secondParameterName: Int) {
// 1 つ目と 2 つ目のパラメータの引数値を
// firstParameterName と secondParameterName で参照
}
someFunction(1, 2)
パラメータのデフォルト値
パラメータの型の後に続けて値を代入することで、関数のどのパラメータにでもデフォルト値を定義することができます。デフォルト値が定義されている場合、関数を呼び出すときにそのパラメータを省略することができます。
func someFunction(parameterWithDefault: Int = 12) {
// 関数の呼び出しに引数が渡されていない場合、
// parameterWithDefault の値は 12
}
someFunction(6) // parameterWithDefault は 6
someFunction() // parameterWithDefault は 12
可変長パラメータ
可変長(可変個)パラメータは、指定された型の値を 0 個以上受け取ります。関数を呼び出すときに、可変数の入力値を渡すことができるパラメータを指定するために、可変長パラメータを使用します。パラメータの型名の後にピリオドを 3 文字 (...
) 挿入して可変長パラメータを記述します。
可変長パラメータに渡された値は、しかるべき型の配列として関数の本体内で使用できます。例として、名前が numbers
で型が Double...
の可変長パラメータは、型が [Double] の配列の定数 numbers
として関数の本体内で使用できます。
次の例は、長さ不定の数値リストの算術平均を算出しています。
func arithmeticMean(numbers: Double...) -> Double {
var total: Double = 0
for number in numbers {
total += number
}
return total / Double(numbers.count)
}
arithmeticMean(1, 2, 3, 4, 5)
// 5 つの数値の算術平均である 3.0 を返す
arithmeticMean(3, 8.25, 18.75)
// 3 つの数値の算術平均である 10.0 を返す
入出力パラメータ
関数のパラメータはデフォルトで定数です。関数のパラメータの値をその関数の本体内で変更しようとすると、コンパイル時エラーになります。つまり、誤ってパラメータの値を変更してしまうことはありません。関数のパラメータの値を変更したい、かつ関数が終了した後もその変更を存続させたい場合には、そのパラメータを入出力パラメータとして定義します。
入出力パラメータを記述するには、そのパラメータのはじめに inout
キーワードを置きます。入出力パラメータは関数に渡される値で、関数によって変更され、もとの値を置き換えるために関数の外に戻されます。入出力パラメータの詳細と、関連するコンパイラの最適化については、In-Out Parameters を確認してください。
入出力パラメータには、引数として変数のみ渡すことができます。定数とリテラルは変更することができないため、引数として定数またはリテラル値を渡すことはできません。入出力パラメータに引数として渡すとき、関数によって変更されることを示すアンパサンド (&
) を変数名の前に置きます。
inout
を付けることはできません。
次の例は関数 swapTwoInts(_:_:)
で、整数の入出力パラメータ a
と b
があります。
func swapTwoInts(inout a: Int, inout _ b: Int) {
let temporaryA = a
a = b
b = temporaryA
}
関数 swapTwoInts(_:_:)
は、b
の値を a
に、a
の値を b
に取り替えます。この関数は、一時定数 temporaryA
に a
の値をとっておき、b
の値を a
に代入し、そして temporaryA
を b
に代入します。
Int
型の 2 つの変数の値を交換するために、関数 swapTwoInts(_:_:)
を呼び出すことができます。someInt
と anotherInt
は、関数 swapTwoInts(_:_:)
に渡されるときに、名前にアンパサンドを前置していることに注目してください。
var someInt = 3
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" と出力
この例は、someInt
と anotherInt
がそもそも関数の外で定義されているにもかかわらず、もとの値が関数 swapTwoInts(_:_:)
で変更されていることを示しています。
swapTwoInts
の例では、戻り値の型や値を定義していませんが、someInt
と anotherInt
の値を変更しています。入出力パラメータは、関数本体のスコープの外に影響がある別の方法です。
Portions of this page are translations based on work created and shared by Apple and used according to terms described in the Creative Commons Attribution 4.0 International License.