楽水

人々の創造が自由に表現できる舞台づくり

Swift

Swiftの関数のパラメータ【引数ラベルなどについてわかりやすく解説】

投稿日:2020年8月24日 更新日:


Swift 関数には、パラメータ名の無いシンプルな関数から、引数ラベルや各種パラメータがあるメソッドまで表現できる柔軟性があります。
パラメータは、関数の呼び出しを簡略化するためのデフォルト値を持つことができ、関数が実行を完了したときに渡された変数を変更する入出力パラメータとして渡すことができます。
今回は、以下の観点でSwiftの関数のパラメータの指定方法について丁寧に解説します。

  • Swiftの関数のパラメータについて
  • 引数ラベルを指定する場合
  • 引数ラベルを省略する場合
  • デフォルトのパラメータ値
  • 可変長パラメータを使用する場合
  • 入出力パラメータを使用する場合

参考本
[改訂新版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 WEB+DB PRESS plus

Swiftの関数のパラメータについて

Swiftの関数のパラメータには、引数ラベルとパラメータ名があります。
引数ラベルは、関数呼び出し時の引数に使用します。
パラメータ名は、関数の実装で使用します。
引数ラベルが指定されていない場合、パラメータ名が引数レベルになります。
関数のパラメータはデフォルトで定数です。
関数のパラメータの値をその関数の本体内で変更しようとすると、コンパイル時エラーになります。
つまり、誤ってパラメータの値を変更してしまうことはありません。
それでは、具体的にSwiftの関数のパラメータの指定方法について見ていきましょう。

引数ラベルを指定する場合

以下の例のように、引数ラベルは、パラメータ名の前にスペースで区切って指定することができます。

func someFunction(argumentLabel parameterName: Int) {
//処理
}

以下の例のように、引数ラベルを使用することで、関数の本体を読みやすく、意図を明確に維持したまま、表現力のある文章のように関数を呼び出すことができます。

func greet(person: String, from hometown: String) -> String {
return “Hello \(person)! Glad you could visit from \(hometown).”
}
print(greet(person: “Bill”, from: “Cupertino”))
// “Hello Bill! Glad you could visit from Cupertino.”と出力

引数ラベルを省略する場合

もし、パラメータに対して引数ラベルが必要ない場合、以下の例のように、アンダースコアを指定することで省略することができます。

func someFunction(_ firstParameterName: Int, secondParameterName: Int) {
//処理
}
someFunction(1, secondParameterName: 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 を返す

入出力パラメータを使用する場合

関数のパラメータの値を変更したい、かつ関数が終了した後もその変更を存続させたい場合には、そのパラメータを入出力パラメータとして定義します。
入出力パラメータを記述するには、そのパラメータのはじめに inout キーワードを置きます。
入出力パラメータは関数に渡される値で、関数によって変更され、もとの値を置き換えるために関数の外に戻されます。
なお、入出力パラメータがデフォルト値を持つことはできません。
また、可変長パラメータに inout を付けることはできません。

func swapTwoInts(inout a: Int, inout _ b: Int) {
let temporaryA = a
a = b
b = temporaryA
}

入出力パラメータには、引数として変数のみ渡すことができます。
定数とリテラルは変更することができないため、引数として定数またはリテラル値を渡すことはできません。
入出力パラメータに引数として渡すとき、関数によって変更されることを示すアンパサンド (&) を変数名の前に置きます。

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” と出力

今回は、Swiftの関数のパラメータの指定方法について解説しました。

-Swift
-, ,

執筆者:


  1. […] Swiftの関数 Swiftの関数のパラメータ Swiftの関数のネスト を参照してください。 参考本 […]

関連記事

Swiftのメモリ管理【weakやunownedをわかりやすく解説】

Swiftのプログラムでweakやonwnedというキーワードをみたことはありませんか? これはSwiftが採用しているARCというメモリ管理の仕組みに関係しています。 今回は以下の観点でSwiftの …

Swiftのプロパティ【プロパティオブザーバーなどをわかりやすく解説】

プロパティは値と特定のクラスや構造体、列挙型を結び付けます。 Swiftのプロパティには、値を保持するプロパティだけではなく様々な種類のプロパティがあります。 今回は、Swiftのプロパティについて以 …

Swiftの関数のネストについてわかりやすく解説

Swiftでは、関数のスコープ内に便利な機能を包むために、他の関数の中に関数を記述することができます。 ネストされた関数を別のスコープで使用できるように、ネストしている関数からネストされた関数を返すこ …

Swiftのサブスクリプトをわかりやすく解説

Swiftでは、クラス、構造体、および列挙型には、コレクション、リスト、シーケンスのメンバー要素にアクセスするショートカットであるサブスクリプトを定義することができます。 今回は、Swiftのサブスク …

Swiftのクラスと構造体をわかりやすく解説

Swiftを学ぶ過程で、クラスと構造体は何が違うのか知りたいと考える人もいると思います。 そこで、今回は、以下の観点でSwiftのクラスと構造体について解説します。 クラスと構造体の定義 クラスと構造 …