仮引数と実引数
関数の引数という用語は、関数の定義時に宣言する場合と、関数の呼び出し時に指定するものを指す場合の2通りがあります。
両者を明示的に分ける場合、前者を仮引数と言い、後者を実引数と言います。
次の例では、関数の宣言時に宣言しているintが仮引数であり、関数の呼び出し時に指定している1が実引数です。
func printInt(_ int: Int) {
print(int)
}
printInt(1)
実行結果
1
外部引数名と内部引数名
引数名は関数の呼び出し時に使用する外部引数名と、関数内で使用される内部引数名の2つを持つことができます。
外部引数名と内部引数名を分けるには、外部引数名 内部引数名:型という形式で引数を定義します。
次の例では、第2引数の外部引数はtoであり、内部引数名はgroupです。
func invite(user: String, to group: String) {
print("\(user) is invite to \(group).")
}
invite(user: "Ishikawa", to: "Soccer Club")
実行結果
Ishikawa is invite to Soccer Club.
第2引数の内部引数名はgroupとなっているてめ、invite(user)関数の中ではgroupという名前で引数を使用できます。
外部引数名には関数を利用する側から見てわかりやすい名前を、内部引数名にはプログラムが冗長にならない名前をつけることが一本的です。
外部引数名の省略
外部引数名を省略したい場合には、外部引数名にを使用します。外部引数名がで省略されている場合は、引数名と引数を分けている:も省略して呼び出します。
func sum(_ int1: Int, _ int2: Int) -> Int {
return int1 + int2
}
let result = sum(1, 2)
print(result)
実行結果
1
_ を使って外部引数と内部引数を省略できるので、業務ではコードを見やすくするリファクタリングの際に使われる書き方だそう。
Flutterやってたときは、create: (_, model, _)こんなのがあったような?
本来は、create: (context, model, child)と書いていた。
なれないと _ アンダースコアなんでつけるのと混乱してた...