ネストという言葉は前にも一度出てきましたね。「入れ子」という意味です。「ループをネストする」というのは「ループの中に別のループを入れる」ということを指します。
どちらも{}という記号でループ内容をサンドしているので、見た目が紛らわしいですが、「ループの中身は行頭を字下げする」という書き方をすると少し見やすくなります。字下げとはインデントとも呼びますが、行の頭に空白を入れて右へズラすことをいいます。Swift Playgroundでは空白(半角スペース)を4つ入れるのを字下げのルールとしているようなので、それに従いましょう。字下げするのはwhile {行と最後の}行の間の処理です。{の後で改行ボタンを押すと自動で空白4つ分字下げをしてくれる場合もあります。今回のようにループがネスト(入れ子)になる場合、内側のループの{}の中身は4+4で8文字分字下げすることになります。ループが深くなればなるほど4文字ずつ右にズレていくイメージです。
字下げはしてもしなくてもプログラムの動きには影響しませんが、コードが複雑になって頭がこんがらがって来た時に必ず助けになりますので、するクセをつけておくと良いでしょう。
さてステージは、うずまき状に内側へと進んでいく作りです。一番中にいくと行き止まって進めなくなるので、全体としては行き止まりまで進むことにします。次に曲がり角ですが、そこには必ず宝石があるようです。「宝石があるまでは直進し、宝石まで来たら(取ってから)左に曲がる」というループを内側に置きます。これを行き止まるまでループするのです。
1 2 3 4 5 6 7 8 9 |
//外側のループ(行き止まりまで進む) while !isBlocked { //内側のループ(宝石があるまで進む) while !isOnGem { moveForward() } //内側のループここまで collectGem() turnLeft() } //外側のループここまで |
なお字下げルールは、whileだけでなく、func文やif文など{}で処理内容を挟む場合全般に使用します。