Swift Playgroundsの各面の内容を日本語で

Fundamentals of Swift編

Appleが出したiPad用プログラミング学習アプリ、Swift Playgroundsの基礎コースFundamentals of Swiftの各面の内容を書きます。Hour of Codeと共通のものは (★ : Hour of Code) を付けてあります。

Swift Playgroundsをやりながら補助的に読むのを想定しています。

Commands

Introduction (★ : Hour of Code)

コマンドの紹介。ここで紹介されたコマンドは生物に与える命令。moveFoward()「進む」と、collectGem()「宝石を取る」を紹介。

Issuing Commands (★ : Hour of Code)

moveFoward()「進む」collectGem()「宝石を取る」の2つのコマンドの演習。クリアするにはmoveFoward()が3回、collectGem()が1回必要。プログラム入力エリアをタップすると画面の下にコマンドのリストが出てくる。リストから必要なものを選択し順番に入力する。collectGem()は宝石の場所で実行しなければ意味がない。

Adding a New Command (★ : Hour of Code)

turnLeft()「左に曲がる」の演習。宝石を取るためには左に曲がらなければいけない。

Toggling a Switch (★ : Hour of Code)

toggleSwitch()「スイッチを切り替える」の演習。灰色の正方形のものはスイッチ。スイッチはOpenとCloseがあって、Openにすると光る。CloseのスイッチをOpenにするとクリア。Open状態をon、Close状態をoffと表現することもある。toggleSwitch()はスイッチの場所で実行しないと意味がない。

Portal Practice (★ : Hour of Code)

Portalの演習。Portalは瞬間移動する。入ったときと出たときの生物の向きは同じ。

Finding and Fixing Bugs

間違い探し。何かの順番が違う。実行してみるとすぐに間違いに気が付く。

Bug Squash Practice

これも間違い探し。何かの順番が違うところが2箇所。初めからOpenになっているスイッチは触る必要はない。

The Shortest Route

最短経路を見つける。Portalが2ペアあるが、同じ色同士で瞬間移動する。7つのmoveFoward()と、toggleSwitch()とcollectGem()で全部で9命令。

Functions

Introduction (★ : Hour of Code)

loop(輪を作る)、swoop(からめる?)、pull(ひっぱる)を一つにまとめて、tieMyShoeという命令を作ることが出来る。

func 命令名() {
まとめたい命令
まとめたい命令
}

Composing a New Behavior (★ : Hour of Code)

turnLeft()を複数回使って「右ターン」を実現する。

Creating a New Function (★ : Hour of Code)

function(ファンクション)を作る練習。turnRight()を作成し使ってみる。右折の度にturnLeft()を何度も使うよりも、turnLeft()を3つ含んだturnRight()を作成して使った方が楽なことを確認。

Collect, Toggle, Repeat

経路の中の繰り返しを見つけてその部分をfunctionにし、同じコマンドを何度も打つことを避ける。

Across the Board

これも経路の中の繰り返しを見つけてその部分をfunctionにする。

Nesting Patterns

turnAround()という180度回転するfunctionを作成する。繰り返し部分をsolveStair()というfunctionにまとめ、solveStair()の中にturnAround()を書く。

Slotted Stairways (★ : Hour of Code)

solveRow()を完成させて、functionの内容と名前を関連付けるとわかりやすくなることを確認する。solveRow()には一列の動きを書く。Rowの訳は「列」。

Treasure Hunt

小さな塊と大きな塊の2つのfunctionを作成。

For Loops

Introduction (★ : Hour of Code)

  • ページ2 of 5、花壇に種を植えるときを考えて下さい
  • ページ3 of 5、4つの種のひとつひとつに対して、「穴を掘る」「種を置く」「5インチ移動する」という作業があります。
  • ページ4 of 5、forループの書き方です。forと実行したい回数を指定します。
  • ページ5 of 5、{}の間に実行したい命令を書きます。
for 命令中で使う名前 in 回数 {
命令
}

Using Loops

For Loopの使い方を覚える。一列の動きを書き、それを繰り返す。

Looping All the Sides

For Loopの練習。コードライブラリからforを選択し既存のコードの上に追加する。閉じカッコ } をドラッグして既存のコードを中に入れる。

To the Edge and Back

スイッチをONにしてまた真ん中に戻ってくる。これを繰り返す。

LoopJumper (★ : Hour of Code)

複雑な経路から繰り返しパターンを見つける。

Branch Out

For Loopとfunctionにする部分をうまいこと見つける。

Gem Farm

これもFor Loopとfunctionにする部分をうまいこと見つける課題。

Four Stash Sweep

これもFor Loopとfunctionにする部分をうまいこと見つける課題、最難関。

Condition Code

Checking for Switches

ifの練習。スイッチはRun My Codeを押すごとにOpenだったりCloseだったり勝手に切り替わる。スイッチがCloseかどうかはisOnClosedSwitchを見る。

Using else if

「if なになに else if なになに」の練習。 SwitchがCloseならOpenにし、Openなら宝石を確認する。「SwitchがClose」で「宝石もある」という状況はない模様。ifをタップすると出てきた項目の中にelse ifがある。

Looping Conditional Code

前の問題の要領で組み立て、それをFor Loopに入れる。

Conditional Climb

曲がるところと宝石があるところは一緒。出来れば、elseブロックのmoveFoward()は動かさず、ifブロックの方だけ編集する。

Defining Smarter Functions

collectOrToggle()を完成させる。あとは今まで習ったものを使って組む。

Boxed in

スイッチと宝石はランダムに出現。習ったものを使って組む。

Decision Tree

繰り返し部分をうまく見つける。

Logical Operators

Using the NOT Operator

ビックリマークを使ったNOT Operatorの練習。これはtrueとfalseをひっくり返すことが出来る。宝石は4つあるが、芝生にない場合は、(生物から見て)左の階段を降りた先にある。!を使って組む。!を使わなくても出来るけど!の練習なので!を使う!!

Spiral of NOT

isBlockedという新しいものが出てきた。isBlockedは生物が前に移動できないときtrue、前に進めるときはfalseになる。これを使って左折のタイミングを知ることが出来る。タイルは最後だけの模様。

Checking This AND That

isBlockedLeftが追加。これは左側に進めないときにtrue。また&&が追加。これはA && Bと使い、AとB両方trueのときに全体でtrue。階段を上る状況を表現するのに&&を使う。

Checking This OR That

||が追加。A || Bと使い、AとBのどちらかがtrueのときに全体でtrue。isBlockedRight()があればいいが、ないのであるものを組み合わせる。||をやらせるためのちょっと強引な問題に感じる。宝石は最後だけ。

Logical Labyrinth

習ったものを組み合わせる。タイルと宝石の状況は固定。

While Loops

Running Code While…

whileループの練習。isBlockedがfalseの間、ループする。あるいはisClosedSwitchがtrueの間、ループする。どっちが模範解答なのかは書いてない。まあどっちでも出来る。スイッチの数はランダム。

Creating Smarter While Loops

スイッチのOpenとCloseを確認しながら端まで移動する。説明にyou can’t use the condition isOnClosedSwithとあるが、これはwhileの条件には使えないと言っている。使ってしまうとポータルで止まってしまうから、と書いてあるので。ここから判断するに、わざわざこれを言うということはひとつ前のRunning Code While…はisOnClosedSwitchがtrueの間ループする問題だったのではないかと推測する。

Choosing the Correct Tool

whileでもforでもどちらでも可

Four bu Four

whileでもforでもどちらでも可。うまいこと繰り返しを見つける。スイッチのOpen/Closeはランダム。

Turned Around

今まで習ったものを自由に使う。

Land of Bounty

生物の初めの位置からみて奥行きはRunするごとに変化するが、左がスイッチ、真ん中が宝石、右がスイッチなのは変わらない。スイッチのOpen/Closeはランダム。一番手前の列と一番奥の列は何もない模様。

Nesting Loops

whileブロックの中にwhileブロックを入れる。

Random Rectangles

一つ前とほとんど同じ。

You’re Always Right

これもwhileブロックの中にwhileブロックを入れる。宝石の場所は固定。スイッチのOpen/Closeはランダム。

Algorithms

The Right-Hand Rule

与えられた右手ルールを使ってスイッチまで辿り着く。

Adjusting Your Algorithm

初めに与えられているのは前の問題の解答。進行作業とそれ以外にはっきり分けて組んだら分かりやすくなった。

Conquering a Maze

状況が複雑になったけど前の問題と同じ。宝石はひとつで位置は固定なので宝石を取ったら終わりにすればよい。

Which Way to Turn?

スイッチの位置とOpen/Close、そして宝石の位置は固定の模様。これも右手ルールで最後が宝石になることが読めるので宝石で終わるように組む。右手ルールで行けるけど、タイトルがWhich Way to Turnということで左手ルールでやってみたらこれも最後が宝石になった。どっちでもいい。

Roll Right, Roll Left

結構悩んだ。一列進んだ直後の一個目が宝石なら右へ、スイッチなら左へ行く。次に列を変える条件は、宝石ルートなら端まで行ったとき、スイッチルートなら、スイッチがあって列を変えることが出来るとき。列を変えたらまた一個目が何かによって右に行くか左に行くか判断する。