Swift Playgrounds

コードを学ぼう2【値が等しいかどうか調べる】解答例と解説

値が等しいかどうか調べる

解答例

let switchCounter = numberOfSwitches
var gemCounter = 0

while gemCounter < switchCounter {
  if isOnGem {
    collectGem()
    gemCounter = gemCounter + 1
  }
  if isBlocked {
    turnRight()
  }
  moveForward()
}

解説

定数』が出てきました。
定数とは、『変更できない値を保存するための、名前の付いた入れ物』のことです。
変数は変更できる値だったのに対して、定数は一度値を代入すると、ずっと変わらないということですね。

この課題では、最初からlet switchCounter = numberOfSwitchesが設定してあります。
スイッチの数はランダムに変化するけど、numberOfSwitches(スイッチの数)がswitchCounterという定数でわかるようになっています。
そして、宝石カウンターは数えていくので数値は変化します。
変数(var)で宣言しておけばいいですね。
そのあとは、whileループでwhile gemCounter < switchCounterと置けば
スイッチの数と同じ数になるまで、宝石集めを繰り返します。
『同じ数』なので、『=』を使いたくなってしまいますが、
もし=を使うと、例えばスイッチが全部で6つとして

宝石の数 6 = スイッチの数 6

を確認して、その後のif文を実行してしまい、宝石の数が7になってしまいます。
そして、

宝石の数 7 = スイッチの数 6

falseなので、やっとループが止まります。
こうすると結局、宝石の数とスイッチの数が同数ではないのでエラーになってしまいますね。

要点まとめ

・『定数』を宣言する時は、letを使う