こんにちは、マっさんです!
この記事は筆者に必要な部分を切り出し、まとめたものです。
詳しい内容を知りたい方は、ご購入をおすすめします。

- 作者:荻原 剛志
- 発売日: 2019/11/15
- メディア: 単行本
-関数定義の基本-
関数定義の基本
基本的な関数の書き方は以下のようになります。
// 仮引数は複数指定可能 func 関数名(仮引数: 型) -> 型 { 文・・・ return // 値を返す関数では、文中に必ず"return"が必要 }
以下が具体例な関数の記載方法と呼び出し方法になります。
var total = 0 func count(n: Int) -> { // 整数の引数をとり、整数を返す total += n return total } func reset() { total = 0 } //引数も返り値もない
reset() let a = 10 let b = count(n: a - 5) // 実引数の値は5 print("\(b)") // 5 を表示
上記のコメントで書かれている通り、返り値を返す関数では必ず "return"で値を返してください。 しかし、関数本体が"return"だけの場合、"return"を省略して式だけ記述することができます。
func messageA() -> string { return "テストテスト" } func messageB() -> String { "テストテスト" } // return 無し関数
引数ラベルについて
関数定義で使われる引数のラベリングは、出来るだけ分かりやすい名前にした方が、可読性が上がります。
func buy(product:Int, price:Int, quantity:Int){ print("Product:\(product), amount = \(price * quantity)") } // 関数の呼び出し buy(product:2000, price:200, quantity:1) // buy(2000, 200, 1) よりも分かりやすいですよね
引数ラベルの省略
関数定義を記述する際に、例えば長い名前をつけたくない場合があります。 そう言った場合には、引数のラベリングを "_" で省略することができます。
func area( _ h:Double, _ w:Double) -> Double { return h * w } let a = area(10.0, 5.0) // ここで引数のラベルを書く必要はありません。
"_" の特殊な使われ方
この "_" は識別子の一部として使うこともできますが、ワイルドカードとしても使うことができます。
_ = myGreatProcess(10, 20) // 関数の呼び出して得られた結果の無視をする for _ in 1 ... 10 { // 繰り返しの処理(10回繰り返される) }
考察
基本的な関数定義をここでは記載されていました。しかし、関数の引数に対するラベル付けは私のエンジニア生活で初めて出てきたものでした。(なんせ、対話式言語やJavaしかしてこなかったのでw)
これがあると値の意味付けとしてすごく読みやすいと感じました。
また、
Swiftでは同じ名前の関数を複数個定義することが可能
異なる引数ラベルをもつ関数はそれぞれ別のものとして扱うこともできます。(「オーバーロード」で解説)
そのため、引数ラベルは引数の意味付けと同時に関数の違いを表す手段となっている
そうです。
いや〜勉強になるわ。
では今回は以上!

- 作者:荻原 剛志
- 発売日: 2019/11/15
- メディア: 単行本