この節から「ドット表記」という考え方が登場。Aというインスタンス(物体やキャラクターの個体)のBというプロパティ(性質や状態を表す枠)をCという値にする、という指示を
1 |
a.b = c |
みたいに書きます。この時「.(ドット)」は助詞の「の」みたいなニュアンスです。.がいつでもこういう意味をもつわけではないですが、うしろに「=(イコール)」があって何かを代入してるっぽかったらそういうことだと思えば良いでしょう。
解説文に出ている例の
1 |
greenPortal.isActive = true |
はgreenPortalというインスタンスの、isActive(オンかどうか)というプロパティをtrue(オン)にするという意味ですね。「isナンチャラ」はこれまでisOnGemなどがそうだったようにtrue(真)かfalse(偽)のどちらかの値しか許されないことを示しています。中には、
1 |
〜.color = red |
みたいにtrue/false以外の値を入れたり取り出したりできる場合もあります。あるインスタンスがどんなプロパティ枠をもっていて、そこのどんな種類の値を出し入れできるかは、インスタンスの元となっている設計図であらかじめ決まっています。同じ設計図から作られたインスタンスなら同じプロパティを扱えます。逆に、
1 |
gem1.isActive = true |
とかやってもエラーになるでしょう。宝石にはisActiveというプロパティがそもそもないからです。この辺りは先々でまた出てくると思いますが、現状知っておくといいのは、.を入力した後の予測変換で思った候補が出て来ない時は、そもそもそのインスタンスに対しては思っているプロパティを使えない→違うインスタンスを選んでたり、綴りを間違っていないかチェックしてみる、ということです。
余談が長くなりましたが、このステージの正解例です。
最初にドット表記でgreenPortalをオフにできれば、あとはそう難しいステージではないと思います。
連続で散歩進む場面がとても多いので、funcを使ってmove3()という関数を作って見ました。そして「真ん中のワープゾーンを基点に先端まで行ってスイッチを入れて戻って来て横を向く」を1まとまりにしてforで繰り返しています。これをfuncにするのももちろんアリです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
greenPortal.isActive = false func move3() { for i in 1 ... 3 { moveForward() } } move3() turnRight() for i in 1 ... 3 { move3() toggleSwitch() turnRight() turnRight() move3() turnRight() } |
これではどうでしょうか?
—
greenPortal.isActive = false
var switchCount = 0
func stepForwardPush() {
while isBlockedLeft {
moveForward()
}
turnLeft()
while !isBlocked {
moveForward()
}
if isOnClosedSwitch {
toggleSwitch()
switchCount += 1
if switchCount > 2 {
return
}
turnLeft()
turnLeft()
stepForwardPush()
}
}
stepForwardPush()