**外部引数名(External Parameter Name)**と呼ばれるもので、Swiftの関数定義における重要な特徴の一つです。
外部引数名の意味
Swiftでは、関数の引数は、**関数を呼び出す側で使用する名前(外部引数名)**と、**関数内部で使用する名前(内部引数名)**の2つを持つことができます。
| 種類 | 定義時の位置 | 呼び出し時の役割 |
外部引数名 (for) | 内部引数名の前 | 関数呼び出し時に必須。引数の意味を明確にする。 |
内部引数名 (変数a) | 外部引数名の後 | 関数内部でのみ使用。引数を参照するための変数名。 |
1. 読みやすさ(リーダビリティ)の向上
最も大きな目的は、関数呼び出しの際のコードの読みやすさを向上させることです。
for などの外部引数名を使用することで、関数が「何のために」「どの引数を使うのか」が明確になり、自然な英語の文章のような構造になります。
関数定義:
|
1 2 3 4 |
func fetchOpweather(for 変数a: String) { // 内部では 変数a を使用 print("天気を取得: \(変数a)") } |
関数呼び出し:
|
1 2 |
// for が引数の意味を明確にする fetchOpweather(for: "東京") |
外部引数名がない場合(デフォルトのSwiftの挙動):
|
1 2 3 4 |
func fetchOpweather(変数a: String) { ... } // 呼び出し時に引数の意味がやや不明瞭 fetchOpweather(変数a: "東京") |
2. 引数の区別とネストされた関数の変数名
主に関数がネストされていて引数に同じ変数名を使用している時にこのような引数が見られる気がします。
この認識も正しい側面があります。
外部引数名と内部引数名を分けることで、関数内部で引数を参照するための変数名(変数a)を、呼び出し時に意味を示す名前(for)から独立させることができます。
例えば、ネストされたクロージャや関数がある場合、外部引数名を使うことで、コード内部で使いたい変数名(変数aなど)が、外部のスコープや親の関数ですでに使われている変数名と衝突するのを防ぐ役割も果たせます。
3. デフォルトの挙動
Swiftでは、最初の引数だけは外部引数名が省略される(_が暗黙的に適用される)のがデフォルトです。2番目以降の引数は、内部引数名と同じ名前が外部引数名としても自動的に設定されます。
しかし、今回のように最初の引数にあえて外部引数名を付けたい場合に、明示的に for や to などの外部引数名を記述します。
例:
| 関数定義 | 呼び出し時の形 |
func move(to destination: CGPoint) | move(to: somePoint) |
func search(for query: String) | search(for: "カフェ") |
func add(amount: Int, to total: inout Int) | add(amount: 5, to: &myTotal) |

コメント