Swiftはじめました 第8回
こんにちは〜ツクリテのムゥです。
この連載も8回目となりましたが楽しんでいただけてますでしょうか。
文章を書くのもだいぶ慣れてきた気がします。
これを読んで「Swiftやってみようかな」って思ってもらえたらいいなと思っていますので、今回も最後までお付き合いください!
前回まで
前回で条件分岐コードの学習は終了しました。
内容が徐々に論理的な内容になってきている気がします。
語学の学習に似ているところもあるかもしれませんね。
最初の条件分岐コードで一致していない場合の、追加条件も設定できてしまうという優れものでした。
条件が増えるとテンパりますが、一つ一つコードをしっかり見て整理していけば時間はかかっても組み立てられましたね!
今回からは、論理演算子に入っていきます。
この論理演算子とは、条件分岐コードより、指示する条件を更に強力にするものです。もっと細かく指示できる便利なコードだそうです。
また新たに記号が出てきましたねぇ〜
「&&」「||」「!」 この3種類。。。なんだか複雑ですね。
&&は、すべての条件に合致するときの行動を指示
||は、いずれかの条件に合致するときの行動を指示(両方合致する時も含む)
!は、条件を逆に(否定形)してそれに合致するときの行動を指示
小難しいので、ひとまずトライしてみます!
うーむ。。言われていることは難しくはないのでしょうがコードに落とし込むのが難しいですね。。
解説で言われている通りにコードを組んでみましたが、それだけだと進まないんですよね・・・
しょっぱなのステージなのにすでに躓いてました。
私の場合、ループが4回って考えすぎて頭が混乱してしまったのが大きいです。
ここでは、必要な動作を分けて考えてみると良かったです。
一本道にあるジェムを取る
左の階段下のジェムを取る
4回ループするってことは、そのうちの1回を左の階段下のジェムを取って帰ってくる動作に充てればいいのでは?と思いました。
なので、まずはしず太郎がジェムの上にいない時にどういう動きをするかを指示するコードから組立ててみました。
if !isOnGem {
turnLeft()
moveForward()
moveForward()
collectGem()
turnLeft()
turnLeft()
moveForward()
moveForward()
turnLeft()
}
これを組み込んでみると問題なくクリア・・・!良かった。
なんとかうまくいきましたが。。。結構考え込んでしまいました。
次のステージはジェムはなく、何度か左折をした最後のマスにスイッチがあったり無かったりするというものでした。
出た!ループ。
進むマスの数は13だけど、前にお話したようにここでは13回のループでは足りないということにお気づきでしょうか?
そうなのです!
ここは、左折3回分をプラスして合計16回のループになるのです。
今回は以下のコードで問題なくクリアできました。
for i in 1 ... 16 {
if !isBlocked {
moveForward()
} else if isBlocked {
turnLeft()
}
if isOnClosedSwitch {
toggleSwitch()
}
}
思いの外ここはすんなりと進めちゃいましたね。
油断するとすぐ難易度上がるので、気を抜かずに次に進みましょう!
次のステージは見るからに一筋縄ではいかなそうな・・・
課題を読んで、より混乱してしまうポンコツ脳みそがうらめしい。。
ここではまず以下のコードを組み立てることにしました。
左が行き止まりであり、しず太郎がジェムの上にいるという条件に合致する時、
右のスイッチを押しに行くというコードを作りました。
ただ、スイッチを押して帰ってくるという動作は長いので、func関数で作業をまとめておきます。
func switchReturn() {
moveForward()
moveForward()
toggleSwitch()
turnRight()
turnRight()
moveForward()
moveForward()
turnRight()
}
↑と&&を使って組み立てるんですが、左が行き止まりでない箇所もあるため、そこの条件を指定するのが少し難しかったですが、下図のような組立てにおさまります。
ここまでくると、私の脳みそではサクサクと進めることが厳しい。。というのが正直なところでしたが、皆さんはいかがでしたでしょうか?
弊社のエンジニアに聞いたところ、Swiftって独特の訛りのようなものが強いそうで、他のプログラムと同じように扱うとうまく動作できず手こずる部分があるそうです。。。
私は逆に他の知識は無いので、もちろんそんな風に感じないんですけどね!
今回は新しく論理演算子を学んできましたが、この続きは次回のお楽しみとしたいと思います。
小難しい論理演算子は次回で終了予定です!(ヤッホーイ!)
それではまた次回お会いしましょう👋