【Swift】関数の引数にある「 _ 」って何?

Swiftの関数をよく見ると、次の例のように引数に「_」と書かれている場合がありますよね。

 @IBAction func recalculatePressed(_ sender: UIButton) {
    self.dismiss(animated: true, completion: nil)
}

これは、外部引数を省略する時に使うものです。

と言っても「外部引数」って何?と思う人もいると思うので、このページでは関数の引数について詳しく説明していきます。

外部引数と内部引数について

Swiftでは、関数の引数に、「外部引数」と「内部引数」と呼ばれるものを指定できます。

外部引数とは、関数の外部からの引数、言い換えると関数の呼び出し時に使う引数のことを指し、内部引数とは、関数内部で使う引数のことを指します。

具体例を見た方が早いので、次の関数を見てください。

// 関数
func showOrder(name user: String, order menu: String){
    print("\(user) ordered \(menu)")
}

//関数呼び出し
showOrder(name:"Tanaka", order:"Pasta")

上記は、注文した「人」と「料理」を表示する関数です。

関数の引数には「name user」、「order menu」のように2つ付いていますね。

このうち「name」と「order」が外部引数、「user」と「menu」が内部引数を示します。

関数を呼び出す際に使う引数が「外部引数」なので、呼び出し時には「showOrder(name:“Tanaka”, order:“Pasta”)」といった感じで外部引数が使われています。

しかし、関数の処理内を見てみると、「print(“\(user) ordered \(menu)”)」といった感じで別の引数が使われています。

このように外部から受け取った引数とは別の名前で引数を使いたい場合に指定する引数のことを内部引数と言います。



外部引数の省略

外部引数は必要でなければ省略することが可能で、その場合、外部引数の位置に「_ 」を書く必要があります。

// 関数
func showOrder(_ user: String, _ menu: String){
    print("\(user) ordered \(menu)")
}

//関数呼び出し
showOrder("Tanaka","Pasta")

上記は外部引数を省略した例で、この場合、関数呼び出し時の引数は外部引数がないため、値を入れるだけで大丈夫です。

最後に

今回は、関数の引数でよく見る「 _ 」の意味について解説しました。

まとめると次のようになります。

  • 「 _ 」は外部引数を省略する時に使う
  • 外部引数とは、関数の呼び出し時に使う引数のこと
  • 内部引数とは、関数内部で使う引数のこと

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA