20 / 2774%

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ではFoundationpow()という関数が用意されているので、自分で作る必要はありません。

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))

パラメータxx * 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

整数xy乗を返す関数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))

result1から始め、xy回掛けます。3を4回掛けた結果の81が返されます。

問題4

言語に用意されている累乗の関数を使って、5の3乗を表示してください。

答えと解説を見る

模範解答

import Foundation

print(pow(5.0, 3.0))

Foundationpowに底と指数を渡します。結果は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が返されます。