解答例
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回以上回す時は、パラメータを使った関数の方がわかりやすく、便利です。
・パラメータ入力で、複数の値をひとつのコードに表現することができる