関数 7. パターンを探す

出発点から4方向に2ブロックおきにスイッチが並んでいるので、これを順にオンにしていきます。
どういうコマンドのかたまりを関数にまとめるかは自分で考えます。「2マス進んでスイッチを入れる」というのが基本パターンになりそうですが、あえて関数のネストの練習と思って細かい目に関数を分割してみました。それぞれの関係性をチェックしてみてください。

関数 6. 並んだ階段

今回も関数をネストして呼び出します(関数の中から別の関数を使用)。
また今回は関数の名前も自分で決めなければなりません。Swift Playgroundsでは関数名に英語を使うこともできますが、一般的にはアルファベットや数字を使って名前をつけることが多いです。
今回は最初の「目の前の宝石をとり、振り返って元の位置に戻る」を英語で表したcollectGemTurnAround()と、「それを前後3回やって1列分の宝石をとる」solveRow()という名前をつけました。日本語か英語かはさておき、何をする関数なのか直接あらわす名前にしておくのが良いでしょう(私も考えるのが面倒になってpattern1とかすることもありますが…)。
また関数名の途中にはスペースを使えないので単語を組み合わせた名前にする時はこのように2つ目以降の単語の最初の文字だけ大文字にする「キャメルケース(更に正確にはローワーキャメルケース)」で書くことが推奨されています。
「collect gem (and) turn around」という英文からとるなら「collectGemTurnAround()」などとします(andは長いので省略。つけてもOKです)。また通常主語はつけません。その理由は追々明らかになります。

関数 5. パターンをネストする

ネストとは入れ子のことです。本編から関数を呼び出し、その関数の中でさらに別の関数を呼び出す練習です。
どの単位で関数を作るかはあらかじめ指定されているので、それに従ってコードを組んでみましょう。

もちろん最後の部分はfor文で繰り返してもいいですね。

関数 4. 往復する

宝石が3行x3列の合計9つあるので、1列分をとる処理いを関数get3gems()とし、それを三回繰り返す形にしてみました。合間合間で方向転換を指示します。
もちろんこれ以外のやり方でもOKです。自分でパターンを見つけ出して関数にして使ってみましょう。

関数 2. 新しい関数を作る

前ステージで、turnLeft()を3回連続で使うと90°x3=270°回って結果的に右向きになれることがわかりましたが、それを毎回打つとコードが長くなって見づらくなってしまいます。
そこで登場するのがfuncコマンドです。あるコマンドのセットをパックにして名前を付けて、その名前をコマンドとして呼び出せば、セットの中身を連続して実行してくれるというものです。このセットのことを関数と呼びます。数学の言葉なのでやや馴染みづらいですが、英語のfunctionを訳したもので、コマンド名のfuncはそれを略したものです。
使い方は、

という感じです。関数の名前は自分で好きに決められます。その後に()をつけます(意味は追々わかります)。次に{を書いて最初の行は終わりです。次の行からセットで実行したいコマンドを順に書いていきます。何行でも構いません。そして最後のコマンドを書いたらもう一度改行して最後に}を書きます。{と}ではさまれた行がセット内容ということです。

ではさっそくfuncを使って、turnRight()とするとturnLeft()が3回連続で実行される関数を作り、それを使ってステージをクリアしてみましょう。

必須ではありませんが、{と}の間にある行は、先頭に空白を4つ入れて右にズラしておくと、コードを眺めた時にどこからどこが関数の内容なのか見やすくなります。アプリが自動でやってくれる場合もあります。