Mac業界の最新動向はもちろん、読者の皆様にいち早くお伝えしたい重要な情報、
日々の取材活動や編集作業を通して感じた雑感などを読みやすいスタイルで提供します。

Mac Fan メールマガジン

掲載日:

「Collect, Toggle, Repeat」

著者: 氷川りそな

「Collect, Toggle, Repeat」

[ ステージMAP ]

[ クリア条件 ]

ステージ上にあるスイッチを4個オープン、ジェム4個を獲得

[ 難易度 ]

[ 使用するコマンド・条件式 ]

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

【攻略のポイント】柔軟な発想力が試される

「Creating a New Function」で実践したように、繰り返し行われる動作を関数で定義すると、コードをより簡潔にしてプログラム全体をシンプルで効率的な環境にすることができます。そこで今度のチャレンジは、もう少し複雑にジェムとスイッチをペアにしたオリジナルの関数を定義していきます。効率的な関数を作るにはどうすればいいのか、試してみるのにはうってつけのチャレンジとなるでしょう。

繰り返しのパターンを見つけよう

このステージ最大の攻略ポイントは「どこまでパターンを共通化できるか」というところです。まず気づくのが、1ブロック進んでジェムを獲得、スイッチをオープンして1ブロック進んで…というパターンが4カ所すべてにあることです。しかし、これにturnLeft()を加えればすべてOKかと思うと、そう甘いものではないのです。実は2番目のパターンでは次に進むためにもう1ブロック分moveForward()を実行しないと先に進めないという「ひっかけ問題」になっているのがこのチャレンジの特徴です。

一見正方形に見えるこのステージですが、実は横に長い4×5マス構成。観察力が試されています。

自分なりの「答え」を決める

この「ひっかけ」に対処する方法はまず「1ブロック進んでジェムを獲得、スイッチをオープンして1ブロック進む」までを関数で定義してturnLeft()と2番目のパターンだけmoveForward()を追加するという微調整的なアプローチが考えられます。もう1つは「1ブロック進んでジェムを獲得、スイッチをオープンして2ブロック進んでから左を向く」という関数を定義する方法です。この場合最初と3番目のパターンで行き止まりにぶつかってしまいますが、バイトは「先に進めない」というジェスチャをするだけで、次のturnLeft()をきちんとこなしてくれるため課題のクリアは可能です。いわばラーン・トゥ・コードで矛盾した行動を取ったときの対処動作を逆手に取った作戦ですが、このゲームのルールは「クリアできればやり方は問わない」を信条としていることを考えると、どちらの手法を「スマート」と評するかは個人の好み次第とも言えます。

行き止まりでむりやり先に進もうとすると、バイトは「先に進めない!」というジェスチャを返してきます。

Function名とアクションを定義しよう

共通化するパターンを決めたら関数名を決めていきます。まず、絶対に守らないといけないのが「既存のコマンドと同じ名前を使わないこと」ということです。これは同じ名前で定義してしまうとそのコマンドの内容が上書きされてしまうためです。次に名前の付け方ですが、スウィフトではコマンドの名前から動作が推察できるほうが、よい命名方法だとされています。また名前は小文字で始めて、単語の頭を大文字でつないでいく「キャメルケース」という記述法が伝統的に利用されています。

関数名は短く簡潔にするよりは、多少長くても意味がわかるほうが後々困らないことが多いと言われています。