プログラムをしていると同じような処理を何度もしたりすることがよくあります。 また、何度も使うというわけではなくても、処理が長くなってくるとどこで何をやっているのかわからなくなったりします。 そういう時に、ひとかたまりの処理を関数としてくくりだし、プログラムを簡単に、そしてわかりやすくできます。
関数
プログラムの関数とは、基本的に次の要素でできています。
- 関数名
- 引数(パラメータ)
- 戻り値/返り血
- 処理の内容
関数は、関数に渡す引数を変えることで、色々な処理をすることができます。 早速簡単な関数を作ってみましょう。
// a + bを計算して表示する関数
func calc(a: Int, b: Int) {
print("a + b = " + String(a + b))
print("a * b = " + String(a * b))
}
// 関数の呼び出し パラメータにはラベルの指定が必要
calc(a: 10, b: 20)
calc(a: 100, b: 1000)
a + b = 30
a * b = 200
a + b = 1100
a * b = 100000
関数の基本的な書き方は次のようになります。
func 関数名(パラメータラベル: パラメータの型) {
関数の処理
}
関数を利用する(呼び出す)時には、ラベルを指定する必要があります。
関数名(パラメータラベル: 関数に渡すパラメータ)
関数は、処理結果を呼び出し元に返すこともできます。 この呼び出し元に返すデータを戻り値/返り血と言います。
// 返り血のデータ型を -> データ型 で指定
func line(x: Double, a: Double, b: Double) -> Double {
// 値を返すには return を使う
return a * x + b
}
print("(x, y) = (" + String(10.0) + ", " + String(line(x: 10.0, a: 2.0, b: 5.0)) + ")")
print("(x, y) = (" + String(-20.0) + ", " + String(line(x: -20.0, a: 2.0, b: 5.0)) + ")")
(x, y) = (10.0, 25.0)
(x, y) = (-20.0, -35.0)
ラベルの省略
パラメータのラベルは、プログラムを読みやすくするためにあります。 例えば、試しに次のような関数を考えてみましょう。
func go(from: String, to: String) -> String {
return from + "から" + to + "に行きます"
}
print(go(from: "東京", to: "北海道"))
東京から北海道に行きます
この例では、関数の呼び出しを、そのまま普通の文章のように読むことがでkます。 このように、ラベルを使うことでプログラムのコードを読みやすくできます。
しかし、わざわざ毎回ラベルを書くのがめんどくさいという意見もあると思います。 そういう場合は、ラベルを省略することができます。
// 引数の前に _ (アンダースコア)をつけると、呼び出しの時にラベルを省略できる
func line(_ x: Double,_ a: Double,_ b: Double) -> Double {
// 値を返すには return を使う
return a * x + b
}
print("(x, y) = (" + String(10.0) + ", " + String(line(10.0, 2.0, 5.0)) + ")")
print("(x, y) = (" + String(-20.0) + ", " + String(line(-20.0, 2.0, 5.0)) + ")");