top of page
logo_tkrite_2_edited_edited.png

Swiftはじめました 第5回

こんにちは、ツクリテの業務担当ムゥです。この1週間は連休に囲まれてるので、やらなければならないことに追われているのではないでしょうか。。体壊さない程度にいきましょう。

週休3日制の企業がある時代ですしね。「いのちをだいじに」張り切っていきましょう。


 
前回まで

forループの学習。。。かるーくおさらいしておきますと、繰り返したい動作を定義し、その動作のループ回数を指示するコードでしたね。

前回最後のステージが難問でしたが、基本は分解していけばなんとかなるということを実感できたと思います。

引き続き難易度を上げてきていることが予想されますので、こぶし大の気合で頑張ってまいりましょう。


次のステージでは3本の通路の奥のスイッチを押すというもの。

ちょっと見ても繰り返しができそうなところがあると分かります。

とはいえ、細かい動きもあるので、分解して作業をまとめていく必要があります。

ざっと見て考えられるのは「通路を進む」・「通路を戻る」・「振り向く」・「右を向く」ですが、これらにプラスしてちょこちょこと動かさないと達成できそうにないですね。


ここまでくると頭が散らかるので、全コード入力を発動です。

そこから小さい塊の関数をいくつか作ってそれをforループに組み込みました!


長いコードの中からまとめるべき作業を抜粋し、関数を作るのも大変。。。

繰り返しとの兼ね合いも見ながらなので、なんだかんだと時間がかかりました。

あと、こういういかにも繰り返しですっていうステージをやっていると、ループする回数がだんだん分からなくなってきちゃうんですよ。不思議なことに。

多すぎたりして無駄に動くっていうことがね、何度もありました。

試しに途中で動かしたり、最後まで諦めないことが大事ですね。


そして次のステージも一筋縄ではいかなそうな気配。。

ここでは、議題にあるように

  1. ジェムを取りに行く

  2. スイッチを押す

この2つの作業を関数にして繰り返しに組み込んでいくというのがミッション。

躓くポイントとしては、どこまでを関数にするのか、繰り返しの指示とのすり合わせですね。

ここをうまく考えないと余計な動作が増えたり、逆に動作が足りない!なんてことになります。。


早速作業を分解していくと、、

①ジェムを取りに行く

turnRight()
moveForward()
collectGem()
moveForward()
collectGem()
turnLeft()
turnLeft()
moveForward()
moveForward()

②スイッチを押す

moveForward()
toggleSwitch()
moveForward()
toggleSwitch()
turnLeft()
turnLeft()
moveForward()
moveForward()
turnLeft()
moveForward()

↑こうやって見てみると、もっと細かく分解しても良かったかもしれませんね!

単純に、「ジェムを取る」「スイッチを押す」の部分を4つの動作だけでそれぞれ関数を作ってみても良かったのかなと思いました。

今回は折角なのでこのコードを使ってforループに組み込んでみました。


しず太郎もウキウキと歩いてますね。肩から下げているバッグの中身が気になりますが、無事にミッション達成できました!


さて、次でforループでの最後のステージ・・・総まとめ的なものになるのですが、もう見るからにややこしい!


ここのステージで大事なのは、ループするところを見つけて、それを正しく指示するためにはどのルートがいいのか考えること。


ワープホールの位置やジェムを取る順番など。。。考えなくてはならないことが多いですが、小さい塊の関数を作っていくのが一番良いと思いました。

その方が頭を整理しながら進められるので、コードが煩雑になりにくい印象・・



なんとか最後までたどり着けました!

とはいえ途中だいぶ失敗して、、、やたらくるくる回ってたしず太郎には申し訳ないことをしました。。。すまぬ。

このステージがforループ最後ということで、ほんとに難関でしたね!

(gemget()、left2() 、moveleft() が小さい塊の関数です)


for i in 1 ... 4 {
    gemget()
    turnLeft()
    gemget()
    left2()
    moveleft()
    gemget()
    left2()
    moveleft()
    gemget()
    moveForward()
}

まとめ


forループはいかがでしたでしょうか?

なにはともあれ、最後まで走りきったわけですが、非常に頭が疲れました。

この回で私のレベルも1ぐらいは上がっているんじゃないかと思います。


このforループというのは便利な繰り返し機能といった感じなので、この先「自分でアプリを作る!」という時に重宝しそうですね。

私のこの実力でいつそんな日が来るのかはわかりませんけどね。


次回からは「条件分岐コード」なるものを学んでいきます。

もうね、名前からして私の苦手分野であることは間違いないですね。

毎回コレ言ってるような気がしますけど、絶対苦手だと思います。

それでもちゃんとやるので、生暖かく見守ってください。お願いします。


それでは次回もお楽しみに!

bottom of page