Swiftはじめました 第3回
こんにちは。
年々夏の暑さに耐えられなくなっているムゥです。
「Swiftはじめました」連載も無事3回目ですが、皆様はいかがお過ごしてでしょうか
暑さに負けてもゆるい感じで地道に続けていきますので、ついてきてください。
前回まで
前回は、引き続きコードをいくつか学んできました。所感としてはまだ本格的なところまで入っていないというところですね。しかし基礎的な部分を習得できている実感はあるので、頑張っていけそうな気がしています。今回はいよいよ関数についての学習に入っていきます。難しそうな雰囲気を醸しているのですが、多分なんとかなるでしょう。気合を入れすぎると裏目に出るので、程々のやる気でいこうと思います。それでは関数の回、いってみましょう。
Swiftの関数とは
はい、まずは関数とはなんだ?というところからですね。関数と言われてみなさんの頭に思い浮かぶのは、きっとExcelの関数ではないでしょうか?今回勉強する関数とは、一言でいうと「作業をまとめる」です。
Playgrounds内でしっかりと説明してくれているのですが、その例えが素晴らしくわかりやすかったので、ご紹介します!
くつひもを結ぶために必要な3つの作業を、まとめてしまいましょうということですね。まとめた作業に名前をつけて定義すると、その関数を呼び出して実行することができます。長くなってしまったコードを関数で短縮することができる。というイメージを持ってもらうといいかもしれませんね。
ではさっそく関数編の最初のステージへいってみましょう!
せっかくなので、関数を使ってみよう。。。と思ったけどこのステージでは使わないらしい。なんてこった。
ただ、ジェムを取りに行くには、しず太郎に右を向いてもらう必要があるのですが、そのコードはまだ出てきていないですよね。
ここでは、今まで出てきたコードを使って新しい動作をさせるというものだったので、さっそく以下のコードを作成してみました。
moveForward()
moveForward()
moveForward()
turnLeft()
turnLeft()
turnLeft()
moveForward()
moveForward()
moveForward()
collectGem()
右を向く動作は、左を向くというコード(turnLeft())を3回繰り返せば達成できますよね。既存のコードを使って柔軟に考えて対応することがここでの課題だったのかも。。この、すでにあるコードを組み合わせて新しい動きを作ることをコンポジションと呼ぶそうな。。。また一つ賢くなった気がします。
さて、次のステージでようやくfuncの登場。。
冒頭で説明しました funcを使って、右を向くという動きの定義付けをしてみました。これに今まで覚えたコードを組み合わせてスイッチを入れにいくのが今回のミッション。(スイッチは点灯していればONになっているのでその場合は押さなくてもOK)
これは成功動画ですが、本当はしず太郎がおかし い方向に何度か歩いたりしてました。その度に中断してデバッグしたり、、、無事にたどり着けてよかった。そしてお気づきでしょうか、、、前回は右を向くためにturnLeft()を3回繰り返してましたよね?
ここで定義付けした関数のturnRight()は、その動作をまとめたものになります。今までのステージで行ってきた動作指示と同様に、コードで呼び出して使用しています。
複雑な動作指示をする際には必須となる仕組みですね。
どんどんいきましょう。次は、動作の繰り返しパターンをまとめて自分で関数を定義するというもの。。
関数の名前を決める時は、どういう動作をまとめているのか連想しやすいものにするのがオススメです。分からなくなっちゃうので。。私だけかもしれませんが。
次も同様に繰り返しのパターンを定義するというものでした。引っ掛けだなぁと思ったのは、開始地点のしず太郎の上にすでにジェムがあること。。ここは見落としちゃいますよ。。
一つ感じたことは、繰り返し動作を見つけて関数に落とし込む作業は、非常に頭の中が散らかるということ。。
これは慣れの領域な気もするので、まずは関数は使わずに達成までの流れをコードで並べ、その中から繰り返し箇所を見つけて関数にするというやり方をしていく方が、頭を整理する力を養えそうですね。
次のステージも同様の内容だったので割愛しますね。
その次の2つのステージでは、前回のように定義した関数を別に作った関数に組み込むというもの。
ざっくり言うと、大きい問題(←四角)をいくつかの小さい問題(←丸・三角)に分けることを分解するとい うようです。
解説に従って早速挑戦してみました!
思いの外すんなりとクリアできました〜右下に毎回評価が出てくるのですが、こんなに褒めてもらえることは大人になるとなかなか無いので地味にテンションが上がりますね!
次は今回最後の課題・・・関数のおさらいになるのですが、コードがめちゃくちゃ長くなっちゃいました。。。でもなんとかお題はクリアできたので良しとしましょう。めっちゃ褒めてくれてますし。
まとめ
全部で7ステージありました、関数の回はいかがでしたでしょうか?言葉だけ捉えると難しそうという印象でしたが、やってみるとわりと理解できる内容だったと思います。
作業をまとめるというのがキーワードとなるのは納得でしたね。
次回からはforループを学んでいきます。
今度は横文字かよ って感じですが、絶対私の苦手分野であろうと確信しております。。頑張りますけどね。
それでは、また次回をお楽しみに!