LESSON 20 ・ 関数
関数を作る
関数を定義する
func square(_ x: Int) -> Int {
return x * x
}
var a = square(3)
print(a)
funcを使って、自分で関数を定義することができます。関数が行う処理は、{ }のブロックに記述します。
受け取った数の2乗を返す関数squareは上記のように書くことができます。受け取る数をxで表し(xでなくても好きな名前を付けられます)、returnで結果を返します。ここではx * xで2乗した数を返しています。
関数を定義するときに、受け取る値に付ける名前をパラメータ(parameter)と言います。この関数ではxがパラメータです。関数を呼び出すときに渡す値を引数(ひきすう, argument)、関数が返す値を戻り値(もどりち, return value)と言います。また、関数に引数を渡して実行することを、関数を呼び出す(よびだす, call)と言います。
Swiftでは、パラメータxの後に: Intを書いて整数を受け取ることを表し、-> Intで整数を返すことを表します。xの前の_は、呼び出すときの引数ラベルを省略し、square(x: 3)ではなくsquare(3)と書くための記号です。
累乗を計算する
var a = 2 * 2 * 2 * 2 * 2
print(a)
2の5乗を計算していますが、掛け算を何度も書くのは大変です。
関数の形を考える
var a = power(2, 5)
print(a)
これを計算する関数powerを作ってみます。powerには二つのパラメータが必要です。関数には好きな個数のパラメータを定義できます。パラメータが0個の関数を作ることもできます。
power関数を実装する
func power(_ x: Int, _ y: Int) -> Int {
var result = 1
for i in 0..<y {
result *= x
}
return result
}
var a = power(2, 5)
print(a)
関数powerはこのように書くことができます。
使わないループ変数
func power(_ x: Int, _ y: Int) -> Int {
var result = 1
for _ in 0..<y {
result *= x
}
return result
}
var a = power(2, 5)
print(a)
組み込みの関数を使う
import Foundation
var a = pow(2.0, 5.0)
print(a)
実は、SwiftではFoundationにpow()という関数が用意されているので、自分で作る必要はありません。
import Foundation
var a = pow(2.0, 2.5)
print(a)
このpowはさっき自分で書いたpowerよりも汎用的な実装がされており、2.5乗のような小数乗を計算することもできます。
PRACTICE
演習問題
コードを自分で書いて実行してから、答えと解説を確認しましょう。
問題1
整数を一つ受け取り、その数を2乗して返す関数squareを定義してください。square(4)の結果を表示してください。
答えと解説を見る
模範解答
func square(_ x: Int) -> Int {
return x * x
}
print(square(4))
パラメータxをx * xで2乗し、returnで結果を返します。square(4)の戻り値は16です。
問題2
長方形の幅と高さを整数で受け取り、面積を返す関数rectangleAreaを定義してください。幅8、高さ5の面積を表示してください。
答えと解説を見る
模範解答
func rectangleArea(_ width: Int, _ height: Int) -> Int {
return width * height
}
print(rectangleArea(8, 5))
幅と高さをパラメータとして受け取り、その積を戻り値にします。同じ関数へ別の幅と高さを渡せば、ほかの長方形にも使えます。
問題3
整数xのy乗を返す関数powerを定義してください。power(3, 4)の結果を表示してください。
答えと解説を見る
模範解答
func power(_ x: Int, _ y: Int) -> Int {
var result = 1
for _ in 0..<y {
result *= x
}
return result
}
print(power(3, 4))
resultを1から始め、xをy回掛けます。3を4回掛けた結果の81が返されます。
問題4
言語に用意されている累乗の関数を使って、5の3乗を表示してください。
答えと解説を見る
模範解答
import Foundation
print(pow(5.0, 3.0))
Foundationのpowに底と指数を渡します。結果は125.0です。
問題5
1から受け取った整数nまでをすべて掛けた値を返す関数factorialを定義してください。factorial(5)の結果を表示してください。
答えと解説を見る
模範解答
func factorial(_ n: Int) -> Int {
var result = 1
for number in 1..<(n + 1) {
result *= number
}
return result
}
print(factorial(5))
累乗する関数と同じように、ループでresultへ値を掛けていきます。1 * 2 * 3 * 4 * 5の結果である120が返されます。