関数
読了目安 約2分
func で処理に名前を付ける。引数と戻り値、Swift の特徴である引数ラベル。
この章の目次
print や min のように、呼ぶと決まった処理をしてくれる部品を関数と呼びます。
関数は自分でも定義できます。
関数を定義する
関数は func で定義します。
関数に渡す値を引数と呼び、名前と型を括弧の中に書きます。
func greet(name: String) {
print("こんにちは、\(name)さん")
}
greet(name: "Swift")
greet(name: "太郎")定義しただけでは動きません。
greet(name: "Swift") と呼び出した時点で、中の処理が実行されます。
戻り値
関数は計算結果を呼び出し元へ返せます。
返す値を戻り値と呼び、型を -> の後ろに書いて、return で返します。
func square(x: Int) -> Int {
return x * x
}
print(square(x: 5))
print(square(x: 12))return した時点で関数は終了します。
greet のように戻り値のない関数では、-> ごと省略します。
複数の値をまとめて返す方法はタプルの章で扱います。
引数ラベル
呼び出し側に書く name: や x: を引数ラベルと呼びます。
呼び出し時に引数の名前を書かせるのは Swift の特徴で、呼び出しを読むだけで各引数の役割が分かります。
ラベルが冗長なときは、定義側で引数名の前に _ を置くと省略できます。
func add(_ a: Int, _ b: Int) -> Int {
return a + b
}
print(add(3, 5))試してみよう: 定義から _ を消して実行し、呼び出し側がどんなコンパイルエラーになるか見てください。
関数に切り出す意義
関数の価値は、処理のかたまりに名前が付くことです。
使う側は square(x: 5) が 5 の 2 乗だと分かればよく、中身を読み返さずに済みます。
同じ処理を 2 回書きそうになったら、関数にまとめる合図です。 直すときも 1 か所で済みます。
学びどころ
| 概念 | 一言まとめ |
|---|---|
func | 処理に名前を付けて定義する |
| 引数 | 関数に渡す値。名前と型を括弧に書く |
| 戻り値 | -> の後ろに型、return で返す |
| 引数ラベル | 呼び出し時に書く引数の名前。_ で省略できる |
演習
三人兄弟の年齢 A、B、C が 1 行に空白区切りで入力されます。 プレゼント代は 1 人につき、9 歳以下なら 1000 円、10 歳以上なら 年齢 × 100 円です。 三人分の合計を出力してください。
スターターコードの関数 presentPrice を完成させて解いてください。
年齢は 0 以上 100 以下の整数です。
入力例:
5 10 15
出力例:
35005 歳と 10 歳は 1000 円、15 歳は 1500 円で、合計 3500 円です。
模範解答
func presentPrice(age: Int) -> Int {
if age <= 9 {
return 1000
}
return age * 100
}
let ages = readLine()!.split(separator: " ").map { Int($0)! }
let total = presentPrice(age: ages[0]) + presentPrice(age: ages[1]) + presentPrice(age: ages[2])
print(total)return で関数が終わるので、if に else を付けなくても正しく動きます。