Swift Playground - コードを学ぼう1【論理演算子】Part 2

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

Swift Playground - コードを学ぼう1【論理演算子】Part 2

論理 AND / OR 演算子の使い方を学ぼう

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

「コードを学ぼう1」の第5チャプタ「論理演算子」のレッスンを、Part 1・Part 2 の2回に分けて解説しています。今回はその Part 2 です。

  • レッスン1〜2:前回の Part 1 では、「論理 NOT 演算子」について学習しました。
  • レッスン3〜5:この記事で取り上げます。「論理 AND 演算子」と「論理 OR 演算子」を使った条件分岐コードを書けるようになりましょう。

「論理 NOT 演算子」の使い方は実習済みですか?まだの方は Part 1 の記事からご覧ください。

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

レッスンのポイント

まずは、論理演算子について復習をしておきましょう。論理演算子は、条件分岐やループなどで論理的な判断をする際に使われる演算子です。論理的な判断とは、値が true であるか、または false であるかを基準に、処理の流れを決めることを指します。

基本的な論理演算子は、以下の3つです。

1. !:論理否定演算子、NOT「ではない」

    • !A「A ではない」
    • truefalse を反対にする
    • 例:Atrue!Afalse

2. &&:論理積演算子、AND「かつ」

    • A && B「A かつ B」
    • A と B、どちらも正しいときだけ true
    • 例:A は true、B も trueA && Btrue

3. ||:論理和演算子、OR「または」

    • A || B「A または B」
    • A か B、どちらかが正しければ true
    • 例:A は false、B は trueA || Btrue

では、次のセクションからレッスン開始です。Byte を正しく動かすためのコードを書いていきましょう!

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

レッスン 3「両方正しければ合格」

【目標】

  • 論理 AND 演算子の使い方を知る
  • 2つの条件を組み合わせる
Swift Playground/コードを学ぼう1/論理演算子/両方正しければ合格
Swift Playground/コードを学ぼう1/論理演算子/両方正しければ合格

1. 宝石とスイッチの位置を確認しよう
このレッスンでは以下のコードがすでに入力されています。

// 入力済みのコード

for i in 1 ... 7 {
    moveForward()
}

はじめに、宝石とスイッチがどのように配置されているかを確認してください。

  • Byte の目の前には複数の宝石が並んでいる
  • 何もないマスが1つだけある
  • いくつかの宝石の左側はブロックで行き止まりになっていて、右側には切れているスイッチがある

2. ステージをクリアするためには?
宝石を集めてスイッチをオンにする方法を考えましょう。今回は AND 演算子 && を使うレッスンなので、次のように考えることができます。

  • 宝石の上にいる、かつ、左が行き止まりなら、宝石を取って右へ行き、スイッチをオンにして戻る
  • 宝石の上にいるなら、宝石を取る

条件をチェックしながら1マスずつ進んで行けるように、if / else if を使ってコーディングしていきます。

3. if - 両方の条件を満たすなら
最初に、2つの条件を満たす場合のコードを書いていきましょう。if 文の条件に && を使うと、条件が両方とも true の場合のみ true と判断されて { } 内の処理が実行されます。

「宝石の上にいる」は isOnGem、「左が行き止まり」は isBlockedLeft です。

  • isBlockedLeft:イズ・ブロックト・レフト「左が行き止まり」

すでに入力されている moveForward() の下に 、if と2つの条件を入力してください。

for i in 1 ... 7 {
    moveForward()

	// もし宝石の上にいるかつ左が行き止まりなら
    if isOnGem && isBlockedLeft {
 
    } 
}

両方の条件を満たす場合は、宝石を取って右へ行き、スイッチをオンにして戻ります。

for i in 1 ... 7 {
    moveForward()

    if isOnGem && isBlockedLeft {

		// 宝石を取る
        collectGem()

		// 右にあるスイッチを切り替えに行く
        turnRight()
        moveForward()
        moveForward()
        toggleSwitch()

		// 後ろを向いて戻る
        turnLeft()
        turnLeft()
        moveForward()
        moveForward()

		// 前を向く
        turnRight()
    }
}
宝石の上にいて左が行き止まりの場合の動作
宝石の上にいて左が行き止まりの場合の動作

4. else if - 宝石の上にいるなら
次は、宝石を取るだけの場合です。if の後に else if を追加し、collectGem() で宝石を取りましょう。

for i in 1 ... 7 {
    moveForward()
    if isOnGem && isBlockedLeft {
        collectGem()
        turnRight()
        moveForward()
        moveForward()
        toggleSwitch()
        turnLeft()
        turnLeft()
        moveForward()
        moveForward()
        turnRight()

    } else if isOnGem {  // もし宝石の上にいるなら、宝石を取る
        collectGem() 
    }
}

ここで使うのは else ではなく else if だということに注意してください。「宝石の上にいるなら」という条件を指定せずに else だけにしてしまうと、何もないマスでも宝石を取る動作をしてしまうからです。

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

// コード正解例

for i in 1 ... 7 {
    moveForward()
    if isOnGem && isBlockedLeft {
        collectGem()
        turnRight()
        moveForward()
        moveForward()
        toggleSwitch()
        turnLeft()
        turnLeft()
        moveForward()
        moveForward()
        turnRight()
    } else if isOnGem {
        collectGem()
    }
}

レッスン 4「一方でも正しければ合格」

【目標】

  • 論理 OR 演算子の使い方を知る
  • 2つの条件を組み合わせる
Swift Playground/コードを学ぼう1/論理演算子/一方でも正しければ合格
Swift Playground/コードを学ぼう1/論理演算子/一方でも正しければ合格

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

// 入力済みのコード

for i in 1 ... 12 {

}

このステージは、行く手をふさぐブロックや岩があちこちにあります。それらを避けながら、1つだけある宝石を取りに行く方法を考えてみてください。

2. 宝石にたどり着くためには?
行き止まりになっている所と方向転換するタイミングに注目すると、宝石のマスまで行くためには、次のような条件で進んでいけばいいことが分かります。

  • 前が行き止まりなら、右へ進む
  • 左が行き止まりなら、右へ進む

今回は OR 演算子 || を使うレッスンです。条件をチェックしながら進んで行けるように、if / else を使ってコーディングしていきましょう。

3. if - どちらかの条件を満たすなら
最初に、2つの条件を指定する if 文です。条件に || を使うと、1つでも true であれば true と判断されて { } 内の処理が実行されます。

「前が行き止まり」または「左が行き止まり」、どちらかを満たす場合は右に向きを変えて進みましょう。

for i in 1 ... 12 {

	// もし前が行き止まりまたは左が行き止まりなら
	if isBlocked || isBlockedLeft {

		// 右を向いて進む
		turnRight()
		moveForward()
	} 
}

ここで気をつけたいのが、行き止まりになったら turnRight() で向きを変えるだけでなく moveForward() で1マス進んでおく、ということです。例えば、スタートして一番最初にぶつかる行き止まりのマスを見てください。右を向くだけでこの場所に止まってしまうと、次のループで isBlockedLeft に当てはまるため、さらに右を向いてしまい、正しく進むことができません。

前が行き止まりのマスで右を向くだけだと、次は左が行き止まりに当てはまる
前が行き止まりのマスで右を向くだけだと、次は左が行き止まりに当てはまる

4. else - 行き止まりではないなら
次は、前も左も行き止まりではない場合です。if の後に else を追加し、 moveForward() で進みましょう。

for i in 1 ... 12 {
	if isBlocked || isBlockedLeft {
		turnRight()
		moveForward()

	} else {  // どちらの条件も満たさない場合、進む
		moveForward()
	}
}

5. 宝石を取ろう
「前または左が行き止まりなら右へ進み、行き止まりでないなら前へ進む」という処理を for ループで12回繰り返したら宝石に到達です。最後に collectGem() を入力して宝石を取りましょう。

6. コードを実行しよう
「コードを実行」を押して動きを確かめます。向きを変えながら進んで宝石を取れたら、ステージクリアです!

// コード正解例

for i in 1 ... 12 {
	if isBlocked || isBlockedLeft {
		turnRight()
		moveForward()
	} else {
		moveForward()
	}
}
collectGem()

レッスン 5「論理の迷宮」

【目標】

  • 複数の条件で処理を分ける
Swift Playground/コードを学ぼう1/論理演算子/論理の迷宮
Swift Playground/コードを学ぼう1/論理演算子/論理の迷宮

1. 宝石とスイッチの位置を確認しよう
論理演算子のレッスンはこれが最後です。このレッスンでは以下のコードがすでに入力されています。

// 入力済みのコード

for i in 1 ... 8 {
    moveForward()
}

「どんな条件のときに、何をするのか」を考えながら、すべての宝石を集めてスイッチをオンにする方法を見つけてください。

2. ステージをクリアするためには?
このステージをクリアするためには、3つの条件でやることを分けます。if / else if を使ってコーディングしていきましょう。

  • 宝石と切れているスイッチ、両方の上にいる場合
  • 切れているスイッチだけの上にいる場合
  • 宝石だけの上にいる場合

3. if - 両方の条件を満たすなら
最初に、宝石と切れているスイッチ、両方の上にいる場合の if 文です。

AND 演算子 && を使って、isOnGemisOnClosedSwitch を条件に指定します。両方の条件が true であれば、宝石を取ってスイッチをオンにします。右側にある宝石も忘れずに取りに行きましょう。

for i in 1 ... 8 {
    moveForward()

	// もし宝石の上にいるかつ切れているスイッチの上にいるなら
    if isOnGem && isOnClosedSwitch {

		// 宝石を取ってスイッチを切り替える
		collectGem()
		toggleSwitch()

		// 右にある宝石を取りに行く
	    turnRight()
	    moveForward()
	    moveForward()
	    collectGem()

		// 後ろを向いて戻る
	    turnLeft()
	    turnLeft()
		moveForward()
		moveForward()

		// 前を向く
		turnRight()
	}
}
宝石とスイッチの上にいる場合の動作
宝石とスイッチの上にいる場合の動作

4. else if - 切れているスイッチの上にいるなら
続いて、宝石はなく、切れているスイッチだけのマスにいる場合です。

切れているスイッチは必ず曲がり角にありますね。else if で条件を指定し、スイッチをオンにして方向転換しましょう。

for i in 1 ... 8 {
    moveForward()
    if isOnGem && isOnClosedSwitch {
		collectGem()
		toggleSwitch()
	    turnRight()
	    moveForward()
	    moveForward()
	    collectGem()
	    turnLeft()
	    turnLeft()
		moveForward()
		moveForward()
		turnRight()

	} else if isOnClosedSwitch { // もし切れているスイッチの上にいるなら

		// スイッチを切り替えて左を向く
		toggleSwitch()
		turnLeft()

	}
}

5. else if - 宝石の上にいるなら
次は、スイッチはなく、宝石だけのマスにいる場合です。else if で条件を指定し、宝石を取りましょう。

for i in 1 ... 8 {
    moveForward()
    if isOnGem && isOnClosedSwitch {
		collectGem()
		toggleSwitch()
	    turnRight()
	    moveForward()
	    moveForward()
	    collectGem()
	    turnLeft()
	    turnLeft()
		moveForward()
		moveForward()
		turnRight()
	} else if isOnClosedSwitch {
		toggleSwitch()
		turnLeft()

	} else if isOnGem { // 宝石の上にいるなら、宝石を取る
		collectGem()
	}
}

6. コードを実行しよう
「コードを実行」を押して動きを確かめます。3つの条件で動きを変えながら宝石を集めてスイッチをオンにできたら、ステージクリアです!

// コード正解例

for i in 1 ... 8 {
    moveForward()
    if isOnGem && isOnClosedSwitch {
		collectGem()
		toggleSwitch()
	    turnRight()
	    moveForward()
	    moveForward()
	    collectGem()
	    turnLeft()
	    turnLeft()
		moveForward()
		moveForward()
		turnRight()
	} else if isOnClosedSwitch {
		toggleSwitch()
		turnLeft()
	} else if isOnGem {
		collectGem()
	}
}

まとめ

今回は、Swift Playground の「コードを学ぼう1」で、論理 AND 演算子と論理 OR 演算子について学びました。

if 文の条件に論理演算子を使うと、複数の条件を組み合わせることができるので、プログラムの動きを細かくコントロールできるようになります。

  • 条件に AND 演算子 && を使った if 文:
    • 「もし〇〇 かつ ⚫︎⚫︎なら」
    • 両方が true のときだけ処理を実行
  • 条件に OR 演算子 || を使った if 文:
    • 「もし〇〇 または ⚫︎⚫︎なら」
    • どちらか一方でも true であれば処理を実行

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

SNS で Pyxofy とつながりましょう! LinkedInThreadsBlueskyMastodon X (Twitter) @pyxofyFacebook

関連記事

Scratch - Pyxofy
Scratch 3.0の使い方を、プログラミング初心者や子どもにも分かりやすく紹介しています。
JavaScript - Pyxofy
プログラミング言語のJavaScriptについて、初心者向けに解説しています。
CSS Art
Articles for creating CSS Art.
CSS Animation
Articles for creating CSS Animation.