Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Swift
入門編

  1. Swiftとは
  2. Swift実行環境の構築について
  3. print()を使って出力してみよう
  4. コメントとコメントアウトについて
  5. 文字列とエスケープシーケンスについて
  6. 数値について
  7. 基本的な演算子の使い方とオペランドについて
  8. 真偽値と比較演算子について
  9. データ型とは
  10. 変数と定数について
  11. 変数と定数の使い方
  12. 配列とは
  13. 配列の要素の追加や削除について
  14. 配列の使い方
  15. 辞書(Dictionary)とは
  16. 辞書のプロパティの追加や削除について
  1. nilとオプショナルについて
  2. 関数とは
  3. 引数と仮引数について
  4. 内部引数名と外部引数名について
  5. 返り値(戻り値)とreturnについて
  6. タプル(tuple)について
  7. 関数のオーバーロードについて
  8. もし〜ならばというif文について
  9. 論理演算子について
  10. 処理を分岐させるswitch文について
  11. 繰り返しのfor-in文と範囲演算子について
  12. ループ処理のwhile文とrepeat-while文について
  13. 処理を抜けるbreak文とcontinue文について
  14. クラスとインスタンスについて
  15. イニシャライザ(コンストラクタ)について
  16. 関数とクラスの使い分けについて
  1. トップページ
  2. Swift入門編 - 引数と仮引数について

引数と仮引数について

みなさまどうもおはこんばんにちは。

前回は関数についてやっていきましたね。今回は『引数』(ひきすう)についてやっていきましょう。『引数』は「いんすう」じゃなくて「ひきすう」って呼びますので注意です。

あと『引数』は『パラメーター』(Parameters)なんて呼ばれることもあります。こちらも覚えておいて下さい。

さて、前回勉強した関数を使ってちょいと処理を構築してみます。以下を確認してみてください。

func test() {
    print("初音ミク")
}

test() // 文字列『初音ミク』が出力されます。

このサンプルは「文字列『初音ミク』が出力されるだけ」の処理ですね。これだと『print("初音ミク")』と直接書くこととあんまり違いがないのでなんだか使いみちがよくわかりません。

というわけでもうちょっと汎用的に使えるように改造していきたいと思います。

『"初音ミク"』という部分に注目してみましょう。これ、文字列『初音ミク』が固定されてる状態じゃなくて、関数を実行させる度に何か違う値を渡せれば大分汎用的になりそうな予感がありますね。数学でいうと『x』とか『y』とかを使った方程式にしてしまうようなイメージです。

そこで登場するのが『引数』です。ちょいと以下のサンプルを見てみましょう。

func test(s: String) {
    print(s)
}

test(s: "初音ミク") // 文字列『初音ミク』が出力されます。

上記のサンプルは『引数』を使って先程の処理をちょっと汎用的にしてみました。このサンプルは以下のように関数を実行させる度に違う文字列を出力することができます。

func test(s: String) {
    print(s)
}

test(s: "初音ミク") // 文字列『初音ミク』が出力されます。
test(s: "IA") // 文字列『IA』が出力されます。
test(s: "Lily") // 文字列『Lily』が出力されます。

これが『引数』の使い方になりますね。大分処理の幅が広がったのを感じて頂けると思います。

というわけで『引数』の文法を確認していきましょう。まず関数定義の部分からです。以下のサンプルを見てみて下さい。

func test(s: String) {
    print(s)
}

上記の『(s: String)』って部分に注目です。これが『仮引数』(かりひきすう)って呼ばれる部分になります。

『仮引数』の記述方法は任意の識別子(仮引数名)を書いてその後に『:』を置きます。そしたらそのとなりにデータ型を指定してあげるような感じです。データ型の指定が必須なので間違えないようにしてくださいね。

日本語で書いてみるとこんな形になります。

func 関数名(仮引数名: データ型) {
    適当に処理...
}

ここで『仮引数』と『引数』の違いがよく分からんって方もいらっしゃると思いますのでこちらも日本語で書いておきます。こんな感じでございます。慣れてないとややこしいでございますね。

func 関数名(ここは仮引数) { // 関数定義の時に記述するのが『仮引数』です。
    適当に処理...
}

関数名(ここは引数) // 関数実行の際に記述するのが『引数』です。

そして、定義した関数の中で『仮引数』で受け取った値とかを使用するには以下のように『仮引数名』を記述します。仮引数を使用する際は宣言などは必要ないため『var』や『let』などを記述する必要はありません。

func test(s: String) {
    print(s) // 仮引数『s』で受け取った文字列を使用する際はこのように『仮引数名』を記述しちゃえばOKです。
}

ここまでは大丈夫そうでしょうか。

続いて関数実行の際の記述も確認していきましょう。関数実行の際はまず『仮引数名』を記述してその後に『:』を置きます。そしてその隣に渡したい値とかを記述する形になりますね。

仮引数名を記述する必要がある、というところを間違えないようにして下さい。他のプログラム言語ではあまり見ない記述方法になるので要注意です。

func test(s: String) {
    print(s)
}

test(s: "初音ミク") // 文字列『初音ミク』が出力されます。
test("IA") // 『仮引数名』がないためエラーです。

こちらも日本語で書いておきます。

func 関数名(仮引数名: データ型) {
    適当に処理...
}

関数名(仮引数名: 関数実行の際に渡したい値とか)

基本的なところはこんな感じになりますね。

続いて『引数』の個数は1つだけでなく複数の『引数』を渡す事もできますのでそちらも確認しておきましょう。以下のサンプルをちょいと見てみてください。以下は「引数で受け取った2つのInt型の値を加算して出力する処理」になります。

func test(n: Int, _n: Int) {
    print(n + _n)
}

test(n: 1, _n: 2) // 数値『3』が出力されます。

上記の『(n: Int, _n: Int)』という部分と『(n: 1, _n: 2)』という部分に注目です。このように『,』を使って区切ることで複数の『引数』と『仮引数』を記述することができます。複数の『引数』を使用するパターンはかなり多いので『,』の使い方はバッチリマスターしてしまって下さい。

あと最後に『引数』に初期値を設定することができるのでそちらも確認しておきましょう。以下のサンプルを見てみて下さい。

func test(n: Int = 1, _n: Int = 2) {
    print(n + _n)
}

上記の『n: Int = 1』や『_n: Int = 2』みたいに『仮引数: データ型 = 値』とすることで『引数』の初期値を設定することができます。

この『引数』の初期値は、「該当する『引数』が渡されずに実行された場合の値になる」といったような動作になります。こんな感じですね。

func test(n: Int = 1, _n: Int = 2) {
    print(n + _n)
}

test() // 『3』が出力されます。『引数』を渡していないため『n』には初期値の『1』、『_n』には初期値の『2』が渡されたものとして実行されています。

『引数』をちゃんと渡してあげればその渡したデータが優先されます。

func test(n: Int = 1, _n: Int = 2) {
    print(n + _n)
}

test() // 『3』が出力されます。『引数』を渡していないため『n』には初期値の『1』、『_n』には初期値の『2』が渡されたものとして実行されています。

test(n: 10) // 『12』が出力されます。片方の『引数』の『_n』が渡されてないため、初期値の『2』が渡されたものとして実行されます。

test(n: 10, _n: 20) // 『30』が出力されます。『引数』を渡しているのでその引数を使って実行します。

こんな感じでとっても便利なのでぜひ使ってみて下さい。

というわけで『引数』とか『仮引数』とかの基本的なところはこんな感じになりますね。次の記事では『内部引数名』とか『外部引数名』についてやっていきましょう。ではではこの辺で。またお会いしましょう。

この記事は桜舞が執筆致しました。

著者が愛する小型哺乳類

桜舞 春人 Sakurama Haruto

ISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。