見出し画像

プログラミングを始める。 - 関数5(その他)

まず1つ関数あります。

func addTwoInts(_ a: Int, _ b: Int) -> Int {
   return a + b
}

変数に関数を入れてみます。

var mathFunction: (Int, Int) -> Int = addTwoInts

内容的には以下図示してみます。

画像1

変数を型を指定して作ります。この時関数の型(引数の数、型、返り値)を決めてやります。そしてその型と同じ関数を代入することで作った変数は関数と同じ振る舞いができるようになります。

使ってみます。

print(mathFunction(2,3))

"5"と出力されます。

次は引数に関数を入れる関数です。変数と同じように、関数の引数部分に関数の型、返り値を指定します。まず、returnがない関数では、

func printMathResult(_ mathFunction: (Int, Int) -> Int, _ a: Int, _ b: Int) {
   print("Result: \(mathFunction(a, b))")
}

実行します。

printMathResult(addTwoInts, 3, 5)

とすると、Result:8と出力されます。

次にreturn、返り値をもつ関数の場合です。まず2つの関数があります。

func stepForward(_ input: Int) -> Int {
   return input + 1
}

func stepBackward(_ input: Int) -> Int {
   return input - 1
}

この関数を以下のように取り入れた関数を作ります。

func chooseStepFunction(backward: Bool) -> (Int) -> Int {
   return backward ? stepBackward : stepForward
}

使ってみます。

var currentValue = 3
let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)

変数moveNearerToZeroに先ほどの関数を入れて

moveNearerToZero(3)

と使ってみると、

currentValue = 3

としているので

backward: currentValue > 0

は真になりますので

stepBackward

が呼ばれ、"moveNearerToZero(3)"のように3を入れて関数実行となるので

func stepBackward(_ input: Int) -> Int {
   return input - 1
}

が実行され、入力値inputが3となり、返り値は

input - 1

となるので出力は"2"と出てきます。

この記事が気に入ったらサポートをしてみませんか?