Swift Playgrounds

コードを学ぼう2【関数を作る】解答例と解説

関数を作る

解答例

let expert = Expert()
let character = Character()

func turnLock(up: Bool, numberOfTimes: Int) {
  for i in 1 ... numberOfTimes {
    if up == true {
      expert.turnLockUp()
    } else {
      expert.turnLockDown()
    }
  }
}

func expertTurnAround() {
  expert.turnLeft()
  expert.turnLeft()
}

func characterTurnAround() {
  character.turnLeft()
  character.turnLeft()
}

turnLock(up: true, numberOfTimes: 3)
expertTurnAround()
turnLock(up: true, numberOfTimes: 3)
character.move(distance: 3)
character.collectGem()
characterTurnAround()

for i in 1 ... 2 {
  character.moveForward()
  character.turnLeft()
}

turnLock(up: false, numberOfTimes: 3)
expertTurnAround()
turnLock(up: false, numberOfTimes: 2)
character.moveForward()
characterTurnAround()
character.collectGem()
character.moveForward()
expert.turnLockDown()
character.move(distance: 2)
character.collectGem()

解説

今回も、二人の協力でゴールできる面白い課題です。
turnLockという関数を作り、ブール値で判断するupと、
整数(Int)を入力するnumberOfTimesという2種類のパラメータを設定します。
turnLockのパラメータについて、以下のように説明があります。

upは、ブール型の値を受け取ります。値として、鍵を回したときに地面が上に動く場合はtrue(真)、
下に動く場合はfalse(偽)を指定できます。
numberOfTimesは、Int型の値を受け取ります。値として、鍵を回す回数を整数で指定できます。

ブール型』とは、trueかfalseで判断できる型のことでしたね。
それから、『Int型』とは、整数(Integer)を代入する型のことです。
この型はそれぞれ決まっているため、例えばInt型なのにBool型の値を代入したりすることはできません。
今回は、エキスパートが鍵を回す際、上ならtrue、下ならfalseとすればOKです。

if up == true
もしupの値がtrueなら

expert.turnLockUp()
エキスパートは鍵を上に回す

else
それ以外、つまり、upの値がfalseなら

expert.turnLockDown()
エキスパートは鍵を下に回す

以上をforループで囲って、回数も代入できるようになりました。
2つのパラメータを一行に書けるので、お得ですね。
あとは、3回上げたり2回下げたり、、これを何度もトライしてやっとゴールです。
エキスパートが一度だけ鍵を回して下げればいい時などは、
expert.turnLockDown()
と書けばいいですが、
2回以上回す時は、パラメータを使った関数の方がわかりやすく、便利です。

要点まとめ

・パラメータ入力で、複数の値をひとつのコードに表現することができる