Swift Playground - コードを学ぼう2【型】解答例と解説 Part 1

Swift Playground「コードを学ぼう2」で型について学習しましょう。本記事ではプログラミング初心者にも分かりやすいように解説し、コードの正解例を掲載しています。

Swift Playground - コードを学ぼう2【型】解答例と解説 Part 1

ワープの有効/無効を設定しよう

プログラミング言語 Swift を楽しく体験できる Swift Playground で、コーディングの基礎を学びましょう。

今回紹介するのは、「コードを学ぼう2」の第2章「型」です。全部で5つのレッスンを2回に分けて解説していきます。

  • レッスン1〜2:この記事で取り上げます。型、インスタンス、プロパティ、ドット表記について知り、ワープのオンとオフを切り替える練習をしていきましょう。
  • レッスン3〜5:次回の Part 2 では、複数のワープを操作して効率よくゴールするためのコーディングに挑戦します。

第1章の「変数」は実習済みですか?まだの方は以下の記事からご覧ください。

Swift Playground - コードを学ぼう2【変数】Part 1
Swift Playground「コードを学ぼう2」で変数について学習しましょう。本記事ではプログラミング初心者にも分かりやすいように解説し、コードの正解例を掲載しています。

レッスンのポイント

プログラムでは、数字や文字など、さまざまなデータを扱います。どんな種類のデータなのかをコンピュータが理解できるように、あらかじめ「これは数字ですよ」「これは文字ですよ」などと指示するのが「型」の役割です。そうすることで、間違いを防いで正しく処理できるようになります。つまり一言でいうと、型とは、データの種類のことです。

// 型の例

100     // Int整数型
"Hello" // String文字列型
true    // Bool真偽値型

上にあげた Int や String のような一般的な型のほかに、Swift Playground には Portal 型や Character 型などの独自の型が用意されています。見てのとおり、型の名前は大文字から始めるのがルールです。

この章では、「型」のほかにも新しい用語がたくさん出てきます。レッスンを始める前に1つずつ見ておきましょう!

インスタンスとは

インスタンスとは、型をもとに作られたモノ(実物)のことです。

型は、「どんな情報を持ち、どんな振る舞いができるか」のルールを決めた「設計図」のようなものであり、実行の主体にはなりません。プログラムで実際に使うのは、型(設計図)をもとに作られたインスタンス(実物)です。

この章には5色のワープが出てきます。これらのワープは「Portal 型」をもとに作られた「インスタンス」です。

Portal型から作られた色違いのインスタンス、ピンクのワープと青のワープ
Portal型から作られた色違いのインスタンス、ピンクのワープと青のワープ

付け足しておくと、ワープに限らず、ステージにある要素はすべて特定の型から作られたインスタンスです。

  • ホッパー:Character 型
  • 地面:Block 型
  • 階段:Stair 型
  • 宝石:Gem 型
  • スイッチ:Switch 型

プロパティとは

プロパティとは、型の中で定義される変数で、そのモノが持つ特徴・状態・情報を表すために使用します。

例えば、Dog という型があるとしましょう。実際の犬は、この Dog 型から作られるインスタンスです。Dog 型には次のようなプロパティが定義されているかもしれません。

  • breed(犬種)
  • gender(性別)
  • color(色)

同じ Dog 型から作られた犬であっても、プロパティに設定される値が異なれば、それぞれ異なる特徴を持つ犬になります。例えば、色を表す color プロパティの場合、

  • color の値が黒 → 黒い犬
  • color の値が白 → 白い犬

となります。つまり、各インスタンスはプロパティに異なる値を持つことで、それぞれ固有の特徴を表現することができるのです。

この章で取り上げていく Portal 型のインスタンスは、ワープの状態(オンまたはオフ)を決めるための isActive(有効)プロパティを持っています。isActive の値が true であればワープは有効です。false であればワープは無効となり、通り抜けることができなくなります。

有効のピンクのワープと無効のワープ
有効のピンクのワープと無効のワープ

ドット表記とは

ドット表記とは、. を使って、あるモノの中身(情報や機能)にアクセスする書き方のことです。ドット . は、「〜の」「〜が持っている」「〜の中にある」のような意味になります。

  • greenPortal.isActive:緑のワープ「の」有効プロパティ

ワープをオンまたはオフにするときは、ドット表記を使って特定のインスタンスの isActive プロパティにアクセスし、代入演算子 = を使って true または false を設定します。

/* 緑のワープの、有効プロパティに、trueを設定する
 →緑のワープをオンにする */
greenPortal.isActive = true

/* 緑のワープの、有効プロパティに、falseを設定する
 →緑のワープをオフにする */
greenPortal.isActive = false

また、今回レッスンには出てきませんが、型の中で定義されるものとして、プロパティのほかに「メソッド」があります。プロパティはそのモノの情報を保存する変数ですが、メソッドは「型の中で定義される関数」で、インスタンスで実行することのできる振る舞い・動作のことです。メソッドは次の章「初期化」の中で使っていきますので、頭の片隅に入れておいてくださいね。

// メソッドの例

/* キャラクターのジャンプメソッドにアクセスする
 →キャラクターがジャンプする */
character.jump()

では、次のセクションからレッスン開始です!

※ この記事で紹介しているコードは、あくまで一つの例です(動作確認 Swift Playground 4.7)。プログラミングでは、同じ動きを作る方法がいくつもあります。いろいろなやり方を試しながら、自分なりの答えを見つけてみてください。

レッスン1「ワープをオフにする」

【目標】

  • プロパティの値を変更する
  • パターンを見つけて繰り返す
Swift Playground/コードを学ぼう2/型/ワープをオフにする
Swift Playground/コードを学ぼう2/型/ワープをオフにする

課題解決の流れ

1. 入力済みのコードを確認しよう
このレッスンでは以下のコードがすでに入力されています。

// 入力済みのコード

greenPortal.isActive = true

はじめは、緑のワープは有効です。切れているスイッチをオンにするためにまっすぐ進むと、ステージの中央でワープしてしまうので、スイッチまで辿り着くことができません。

2. ワープを無効にしよう
ワープを無効にして、スイッチまで進めるようにしましょう。

ワープの isActive プロパティが true であればワープは有効です。isActive に false を代入すると、ワープは無効になります。入力済みのコードを以下のように修正しましょう。

// ワープを無効にする
greenPortal.isActive = false
緑色のワープが灰色になって無効になる
緑色のワープが灰色になって無効になる


3. パターンを見つけて繰り返そう
ワープが無効になったら、普通のマスと同じように進むことができます。繰り返すパターンを見つけて関数を作り、for 文でループしてすべてのスイッチを切り替えに行きましょう。

  • moveThree():3マス進む
// 3マス進む関数を定義する
func moveThree() {
	moveForward()
	moveForward()
	moveForward()
}

// 右側のスイッチから順番に切り替えて行く
for i in 1 ... 3 {
	// 3マス進んで、右を向く(スイッチの方向)
	moveThree()
	turnRight()
	// 3マス進んで、スイッチを切り替える
	moveThree()
	toggleSwitch()
	// 後ろを向く(中心の方向)
	turnLeft()
	turnLeft()
}

関数と for ループについては以下の記事を参考にしてください。

Swift Playground - コードを学ぼう1【関数】Part 1
Swift Playground「コードを学ぼう1」で関数の使い方を学習しましょう。本記事ではプログラミング初心者にも分かりやすいように解説し、コードの正解例を掲載しています。
Swift Playground - コードを学ぼう1【for ループ】Part 1
Swift Playground「コードを学ぼう1」で for ループの使い方を学習しましょう。本記事ではプログラミング初心者にも分かりやすいように解説し、コードの正解例を掲載しています。

4. 完成コードを実行しよう
「コードを実行」を押して動きを確かめます。ワープを無効にしてスイッチを全部オンにできたら、ステージクリアです!

// コード正解例

greenPortal.isActive = false

func moveThree() {
	moveForward()
	moveForward()
	moveForward()
}

for i in 1 ... 3 {
	moveThree()
	turnRight()
	moveThree()
	toggleSwitch()
	turnLeft()
	turnLeft()
}

レッスン2「ワープのオンとオフ」

【目標】

  • プロパティの値を切り替える
  • 関数を作る
Swift Playground/コードを学ぼう2/型/ワープのオンとオフ
Swift Playground/コードを学ぼう2/型/ワープのオンとオフ

課題解決の流れ

1. 関数を2つ定義しよう
このレッスンの課題は、2本の道をワープで行き来して、宝石を集めてスイッチをオンにすることです。方法はたくさんありますが、できるだけ効率よくクリアする方法を考えましょう。

最初に、よく出てくる動きのパターンを見つけて、関数を2つ作ります。

  • moveAndCollect():行き止まりになるまで宝石を集めながら進む
  • turnAround():道を行ったり来たりできるように向きを変える
// 宝石を集めながら進む関数を定義する
func moveAndCollect() {
	// 行き止まりになるまで繰り返す
	while !isBlocked {
		// 1マス進んで、宝石があれば取る
		moveForward()
		if isOnGem {
			collectGem()
		}
	}
}

// 後ろを向く関数を定義する
func turnAround() {
	turnLeft()
	turnLeft()
}

while ループと if 文については以下の記事を参考にしてください。

Swift Playground - コードを学ぼう1【while ループ】Part 1
Swift Playground「コードを学ぼう1」でwhile ループについて学習しましょう。本記事ではプログラミング初心者にも分かりやすいように解説し、コードの正解例を掲載しています。
Swift Playground - コードを学ぼう1【条件分岐コード】Part 1
Swift Playground「コードを学ぼう1」で条件分岐コードについて学習しましょう。本記事ではプログラミング初心者にも分かりやすいように解説し、コードの正解例を掲載しています。

2. ワープを通って宝石を集めよう
紫のワープは有効です。そのままスタートして、ワープ先の道にある宝石を集めましょう。

// ワープ先の宝石を集めて、後ろを向く
moveAndCollect()
turnAround()
ワープを通って宝石を集め、後ろを向く
ワープを通って宝石を集め、後ろを向く

3. ワープをオフにしてスイッチを切り替えに行こう
宝石を集めて道の端で向きを変えたら、スイッチを切り替えに行きます。スイッチへ到達するためにはワープを無効にする必要がありますね。purplePortal の isActive プロパティに false を代入してから、スイッチを切り替えに行きましょう。

// ワープを無効にする
purplePortal.isActive = false

// 行き止まりになるまで進む
while !isBlocked {
	moveForward()
}

// スイッチを切り替えて、後ろを向く
toggleSwitch()
turnAround()

4. ワープをオンにして宝石を集めに行こう
スイッチをオンにしたあとはワープを有効に戻して、はじめにいた列の宝石を集めに行きます。

// ワープを有効にする
purplePortal.isActive = true

// 宝石を集めながら進む
moveAndCollect()

5. 完成コードを実行しよう
「コードを実行」を押して動きを確かめましょう。紫のワープの有効と無効を切り替えて、宝石を集めてスイッチをオンにできたら、ステージクリアです!

// コード正解例

func moveAndCollect() {
	while !isBlocked {
		moveForward()
		if isOnGem {
			collectGem()
		}
	}
}

func turnAround() {
	turnLeft()
	turnLeft()
}

// 紫ワープを通って宝石を集める
moveAndCollect()
turnAround()
// 紫ワープをオフにして、スイッチを切り替える
purplePortal.isActive = false
while !isBlocked {
	moveForward()
}
toggleSwitch()
turnAround()
// 紫ワープをオンに戻して、はじめにいた列の宝石を集める
purplePortal.isActive = true
moveAndCollect()

まとめ

今回は、Swift Playground の「コードを学ぼう2」で、型について学習しました。

型とは、データの種類を決めるルールのことです。型があることで、プログラムはデータを正しく扱うことができます。2つのレッスンをとおして学んだことを、簡単に下にまとめました。

  • ステージに配置されているワープは Portal 型から作られたインスタンスである
  • Portal 型は、ワープの状態を保存する isActive というプロパティを定義している
  • プロパティ値が true であればワープは有効(オン)、false であれば無効(オフ)となる
  • オンとオフを設定する際は、ドット表記で特定のワープ(インスタンス)の isActive プロパティにアクセスする

次回予告

次のレッスンからは2組のワープを操作します。何色のワープをどのタイミングで切り替えれば上手にクリアできるのかを、一緒に考えていきましょう。

次の記事(準備中) →

最後まで読んでいただき、ありがとうございます。この記事をシェアしてくれると嬉しいです!

SNS で Pyxofy とつながりましょう! LinkedIn・ Threads・Bluesky・ Mastodon・ X (Twitter) @pyxofy・ Facebook

関連記事

Swift Programming
Swift Playgrounds アプリで学ぶ初心者向けのコーディングチュートリアルを解説しています。
スクラッチプログラミング - sin サイン・cos コサインのつかいかた
Scratch の sin サイン・cos コサインをつかって、キャラクターをぐるぐる、ゆらゆらうごかしてみましょう。sin や cos のブロックをつかったことがなくてもわかりやすいように、たくさんのサンプルをのせて解説(かいせつ)します。
JavaScript - クリックカウンターの作り方【初心者向け】
ボタンのクリック数を画面に表示するクリックカウンターを作ります。コードのポイントとなるのはインクリメント演算子 ++ と innerHTML です。プログラミング初心者の方でも分かりやすいように、簡単な HTML と JavaScript で解説します。
CSS Art – Creating an Isometric Cube using CSS Transform
Making 3D objects can be difficult and time-consuming. Learn how to combine CSS and isometric projection techniques in this step-by-step article.
CSS Animation – @property and Conic Gradient Animation
Static pie charts are boring, make them fun with animation! Learn conic gradient animation with CSS @property in this step-by-step article.