論理演算子はif文や後で出てくるwhile文などの条件により柔軟で複雑な指定をできるようにするテクニックです。最初はもっとも単純なNOT演算子。ブール値のtrueをfalseに、falseをtrueにと反転します。どんな時に役に立つのでしょう?
例えば、宝石の有無をチェックするisOnGemというのがありました。宝石があったらtrue、なければfalseとなるので、if文では
1 2 3 4 5 |
if isOnGem { //宝石があったらしたい処理 } else { //宝石がなかったらしたい処理 } |
なんて書きます。ただし、宝石がなかった時にしかやりたいことがなかったらどうでしょう?最初のtrue処理のブロックを空にしてもいいんですが、ちょっと無駄っぽいです。そんな時にisOnGemの前に!をつけてtrueをfalseを逆転させてやるのです。
1 2 3 |
if !isOnGem { //宝石がなかったらしたい処理 } |
isOnGemがtrueだった時、!によってひっくり返ってif文にはfalseだと伝えられます。!は天邪鬼(あまのじゃく)な伝言係なのです。
さてステージの方は4マスの中心ルートを進みながら、宝石があったらとり、なかったら脇道へ降りていった先の宝石をとって戻ります。ぶっちゃけ!で反転しなくても全体の行数は変わらないのですが、練習だと思って!を使ってtrueブロックとfalseブロックの中身が逆になることを実感してみてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
for i in 1 ... 4 { moveForward() if !isOnGem { //!があるので、「宝石がなかった」場合にここが処理されます turnLeft() moveForward() moveForward() collectGem() turnLeft() turnLeft() moveForward() moveForward() turnLeft() } else { //逆にこちらが「宝石があった」場合です collectGem() } } |
NOTの記号!が候補欄に無く書けません。キーボードから書いてもエラーが出ます。どうすれば書けるのでしょうか。お教え願います。
ブール値のわかりやすい説明、参考になりました。
今後とも息子と共に参考にさせて頂きます。
自分のブログで紹介させてもらっても宜しいでしょうか?
お返事遅くなり申し訳ありません。リンクなどご自由にどうぞ。