Swift Playground - コードを学ぼう2【変数】Part 3

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

Swift Playground - コードを学ぼう2【変数】Part 3

変数と定数の違いを学ぼう

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

「コードを学ぼう2」の第1章「変数」のレッスンを3回に分けて解説しています。今回はその Part 3 です。

  • レッスン1〜3:変数の基本的な使い方を Part 1 で紹介しました。
  • レッスン4〜5:前回の Part 2 で取り上げ、変数を while ループの条件に使う課題に取り組みました。
  • レッスン6〜8:この記事で解説します。変数だけでなく定数について知り、2つを使い分けられるようになりましょう。

変数のレッスン4〜5は実習済みですか?まだの方は Part 2 の記事からご覧ください。

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

レッスンのポイント

今回のレッスンでは、変数だけでなく「定数」を使ってコーディングしていきます。定数は、変数と同じように値を入れる箱のようなものですが、変数と違って、あとから値を変更することはできません。

これまで学んだことの復習も兼ねて、レッスンを始める際に知っておきたいポイントを下にまとめました。

  • 新しく変数を作るときは、キーワード var(ヴァー)を使って宣言します。
  • 変数の値は、途中で変更することができます。
// 変数を宣言する
var 変数の名前 = 最初に入れる値

// 変数に新しい値を代入する
変数の名前 = 新しい値
  • 新しく定数を作るときは、キーワード let(レット)を使って宣言します。
  • 定数には、途中で変化しない値を格納します。
// 定数を宣言する
let 定数の名前 = 定数に入れる値

変数と定数を正しく使い分けると、プログラムの意図を理解しやすくなり、バグを防ぐことにもつながります。

変数と定数の基本的な違い
変数と定数の基本的な違い

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

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

レッスン6「値が等しいかどうかを調べる」

【目標】

  • 定数の使い方を知る
  • 変数と定数を比較する
Swift Playground/コードを学ぼう2/変数/値が等しいかどうかを調べる
Swift Playground/コードを学ぼう2/変数/値が等しいかどうかを調べる

課題解決の流れ

1. ステージを確認しよう
このレッスンの課題は、出現したスイッチと同じ数だけ宝石を集めることです。

はじめにコードを実行してみましょう。実行するたびに、宝石とスイッチがランダムに現れることを確認してください。ステージ上部にあるスイッチカウンターには、スイッチの数が表示されます。

出現したスイッチの数がスイッチカウンターに保存される
出現したスイッチの数がスイッチカウンターに保存される

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

// 入力済みのコード

let switchCounter = numberOfSwitches

これは、スイッチの数 numberOfSwitches を、定数 switchCounter に保存する文です。出現したスイッチの数はコード実行中に変化しないので、「定数」に格納しておきます。

  • switchCounter:スイッチカウンター(定数)
  • numberOfSwitches:出現したスイッチの数(定数に入れる値)

3. 変数と定数が同じ値になるまで繰り返そう
宝石はコード実行中にも新しく出てきます。集めた宝石の数がスイッチの数より少ない間は、ホッパーを動かし続けて宝石を集めましょう。

ループで繰り返す条件は gemCounter < switchCounter です。宝石の数を記録する変数 gemCounter を宣言してから、while ループを入力してください。

// 変数を宣言する
var gemCounter = 0

// 宝石カウンターがスイッチカウンターより小さい間は繰り返す
while gemCounter < switchCounter {

}

4. 宝石を集めながら進もう
if 文でマスの状態を確認し、宝石を集めながら右回りで進みましょう。

while gemCounter < switchCounter {

	// 宝石の上にいるなら
	if isOnGem {
		// 宝石を取って、宝石カウンターを1増やす
		collectGem()
		gemCounter = gemCounter + 1
	}

	// 行き止まりなら
	if isBlocked {
		// 右を向く
		turnRight()
	}

	// 進む
	moveForward()
}

変数 gemCounter と定数 switchCounter の値が等しくなったら、while ループの条件が false になるので、ループ終了です。

5. コードを実行しよう
「コードを実行」を押して動きを確かめます。スイッチと同じ数だけ宝石を集められたら、ステージクリアです!

// コード正解例

let switchCounter = numberOfSwitches
var gemCounter = 0

while gemCounter < switchCounter {
	if isOnGem {
		collectGem()
		gemCounter = gemCounter + 1
	}
	if isBlocked {
		turnRight()
	}
	moveForward()
}

レッスン7「決まった数だけスイッチを入れる」

【目標】

  • 複合代入演算子を使う
  • 2つの変数を比較する
Swift Playground/コードを学ぼう2/変数/決まった数だけスイッチを入れる
Swift Playground/コードを学ぼう2/変数/決まった数だけスイッチを入れる

課題解決の流れ

1. 変数を宣言しよう
このレッスンの課題は、集めた宝石と同じ数だけスイッチをオンにすることです。

宝石の数とスイッチの数をそれぞれ記録できるよう、変数を2つ宣言しましょう。どちらの値もコード実行中に変化するので 、let ではなく var で宣言してください。

// 変数を宣言する
var gemCounter = 0
var switchCounter = 0

2. 宝石を集めて記録しよう
最初に、出現した宝石を残らず集めて、その数を記録します。

今までは、変数の値を増やす際に gemCounter = gemCounter + 1 のように書いてきましたね。実はこのコードは、複合代入演算子 += を使うともっと短く書くことができます。

  • gemCounter += 1:今の変数の値に1をプラスし、それを新しい値として変数に代入する

スイッチのあるエリアへワープするまでの間、while ループでホッパーを動かし続けます。if 文でマスの状態を確認し、宝石を集めながら右回りで進みましょう。

// 切れているスイッチの上にいない間は繰り返す
while !isOnClosedSwitch {

	// 宝石の上にいるなら
	if isOnGem {
		// 宝石を取って、宝石カウンターを1増やす
		collectGem()
		gemCounter += 1
	}

	// 行き止まりなら
	if isBlocked {
		// 右を向く
		turnRight()
	}

	// 進む
	moveForward()
}

スイッチのあるエリアにワープして moveForward() で1マス進んだあとは、!isOnClosedSwitch の条件が false になるので、ループが終了します。

切れているスイッチの上にいない間は繰り返す
切れているスイッチの上にいない間は繰り返す

3. スイッチを切り替えて記録しよう
次は、集めた宝石と同じ数だけスイッチを切り替えます。

変数 switchCounter と gemCounter の値を比べて、条件が true である間は、スイッチをオンにしながら右回りで進みましょう。

// スイッチカウンターが宝石カウンターより小さい間は繰り返す
while switchCounter < gemCounter {

	// 切れているスイッチの上にいるなら
	if isOnClosedSwitch {
		// スイッチを切り替えて、スイッチカウンターを1増やす
		toggleSwitch()
		switchCounter += 1
	}

	// 行き止まりなら
	if isBlocked {
		// 右を向く
		turnRight()
	}

	// 進む
	moveForward()
}

4. コードを実行しよう
「コードを実行」を押して動きを確かめます。宝石をすべて集めて、同じ数だけスイッチをオンにできたらステージクリアです!

// コード正解例

var gemCounter = 0
var switchCounter = 0

// 宝石を集める
while !isOnClosedSwitch {
	if isOnGem {
		collectGem()
		gemCounter += 1
	}
	if isBlocked {
		turnRight()
	}
	moveForward()
}

// スイッチをオンにする
while switchCounter < gemCounter {
	if isOnClosedSwitch {
		toggleSwitch()
		switchCounter += 1
	}
	if isBlocked {
		turnRight()
	}
	moveForward()
}

レッスン8「決まった数だけ集める」

【目標】

  • 定数と変数を比較する
  • 複合代入演算子を使う
Swift Playground/コードを学ぼう2/変数/決まった数だけ集める
Swift Playground/コードを学ぼう2/変数/決まった数だけ集める

課題解決の流れ

1. 入力済みのコードを確認しよう
変数のレッスンはこれが最後です。決められた数だけ宝石を集められるようコーディングしていきましょう。

このレッスンでは以下のコードがすでに入力されています。

// 入力済みのコード

let totalGems = randomNumberOfGems

これは、集めるべき宝石の数 randomNumberOfGems を、定数 totalGems に格納するコードです。randomNumberOfGems の具体的な値が何になるかは、コードを実行してみるまで分かりません。

  • totalGems:宝石の合計数(定数)
  • randomNumberOfGems:ランダムな宝石の数(定数に入れる値)

2. 同じ数になるまで繰り返そう
集めた宝石の数を記録するための変数 gemCounter を用意して、定数 totalGems と同じ値になるまで宝石を集め続けましょう。

// 変数を宣言する
var gemCounter = 0

// 宝石カウンターが宝石の合計数より小さい間は繰り返す
while gemCounter < totalGems {

}

3. 宝石を集めながら進もう
宝石はコード実行中にも新しく出てきます。 if 文でマスの状態を確認しながらステージ全体を歩き回りましょう。宝石があったら取って、行き止まりになったら正しく向きを変えてください。

while gemCounter < totalGems {

    // 宝石の上にいるなら、宝石を取って宝石カウンターを1増やす
    if isOnGem {
        collectGem()
        gemCounter += 1
    }

	// 行き止まりの状態を確認して方向転換する
    if isBlocked && isBlockedLeft && isBlockedRight {
        turnLeft()
		turnLeft()
    } else if isBlocked && isBlockedLeft {
        turnRight()   
    } else if isBlocked {
		turnLeft()
	}

	// 1マスずつ進む
    moveForward()
}

4. コードを実行しよう
「コードを実行」を押して動きを確かめます。決められた数だけ宝石を集められたら、ステージクリアです!

// コード正解例

let totalGems = randomNumberOfGems
var gemCounter = 0

while gemCounter < totalGems {
    if isOnGem {
        collectGem()
        gemCounter += 1
    }
    if isBlocked && isBlockedLeft && isBlockedRight {
        turnLeft()
		turnLeft()
    } else if isBlocked && isBlockedLeft {
        turnRight()   
    } else if isBlocked {
		turnLeft()
	}
    moveForward()
}

まとめ

今回は、Swift Playground の「コードを学ぼう2」で、変数と定数の使い方を学習しました。

変わる可能性のある値には「変数」を、変えない値には「定数」を使います。プログラミング言語によっては、定数の名前はすべて大文字(例:TAX_RATE)にするのが一般的だったりしますが、Swift では定数でも taxRate のように書くのが基本です。はっきりと区別するために、変数は var、定数は let というキーワードを使って宣言することを忘れないようにしましょう!

次回予告

次回はデータ型についてです。「インスタンス」「プロパティ」「ドット表記」などの新しい知識を取り入れながら、ワープのオンとオフを切り替える方法を学びます。

次の記事(準備中) →

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

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

関連記事

Swift Programming
Swift Playgrounds アプリで学ぶ初心者向けのコーディングチュートリアルを解説しています。
Scratch - Pyxofy
Scratch 3.0の使い方を、プログラミング初心者や子どもにも分かりやすく紹介しています。
JavaScript - Pyxofy
プログラミング言語のJavaScriptについて、初心者向けに解説しています。
CSS Art
Articles for creating CSS Art.
CSS Animation
Articles for creating CSS Animation.