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

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

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

論理 NOT 演算子の使い方を学ぼう

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

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

  • レッスン1〜2:この記事で取り上げます。「論理 NOT 演算子」の使い方を練習していきましょう。
  • レッスン3〜5:次回の Part 2 では、「論理 OR 演算子」と「論理 AND 演算子」の使い方を学習します。

第4チャプタの「条件分岐コード」は実習済みですか?まだの方は以下の記事からご覧ください。

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

レッスンのポイント

論理演算子は、プログラムの中で「この条件は true(正しい)か? false(間違っている)か?」を判断するときに使う演算子です。条件分岐やループなどで使われます。

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

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

    • !A「A ではない」
    • truefalse を反対にする
    • 例:Atrue!Afalse
NOT演算子を使った場合のtrueとfalse
NOT演算子を使った場合のtrueとfalse

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

    • A && B「A かつ B」
    • すべてが正しいときだけ true
    • 例:Aは true、Bも trueA && Btrue
AND演算子を使った場合のtrueとfalse
AND演算子を使った場合のtrueとfalse

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

    • A || B「A または B」
    • どれかが正しければ true
    • 例:Aは false、Bは trueA || Btrue
OR演算子を使った場合のtrueとfalse
OR演算子を使った場合のtrueとfalse

このチャプタでは、論理演算子を if 文の条件に使ってコーディングしていきます。論理演算子を使うと、「〜ではない」というような否定を表したり、複数の条件を組み合わせたりできるので、プログラムの動きを細かくコントロールできるようになります。

// NOT演算子
if !A {
    // もしAではないなら、この処理を実行する...
}
// AND演算子
if A && B {
    // もしAとB両方ともtrueなら、この処理を実行する...
}
// OR演算子
if A || B {
    // もしAかBどちらかがtrueなら、この処理を実行する...
}

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

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

レッスン 1「NOT 演算子を使う」

【目標】

  • 論理 NOT 演算子 ! の使い方を知る
  • 宝石があるかどうかで条件分岐する
Swift Playground/コードを学ぼう1/論理演算子/NOT演算子を使う
Swift Playground/コードを学ぼう1/論理演算子/NOT演算子を使う

課題解決の流れ

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

// 入力済みのコード

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

はじめに「コードを実行」を押してみましょう。何度か実行してみて、以下のことを確認してください。

  • Byte は前に4マス進む
  • 宝石のないマスの横には階段が現れる
  • 宝石の数は4つで、そのうち1つは階段の下にある
宝石と階段の位置がランダムに変わる
宝石と階段の位置がランダムに変わる

このステージは、コードを実行してみないと宝石と階段がどこに現れるのか分かりません。

2. 宝石を全部取るためには?
すべての宝石を集めるためには、前へ進むだけでなく、階段を下りて宝石を取りに行かなければなりません。今回は NOT 演算子 ! を使うレッスンなので、次のように考えることができます。

  • もし宝石の上にいないなら、階段を下りて宝石を取り、戻る
  • もし宝石の上にいるなら、宝石を取る

宝石の上に「いない・いる」で Byte の動きを変えるために、条件分岐の if / else を使ってコーディングしていきましょう。

3. if - 宝石の上にいないなら
宝石の上にいないことを調べるためには、isOnGem に NOT 演算子をつけた !isOnGemif 文の条件にします。!isOnGem の間にスペースは入れません。

  • !isOnGem:ノット・イズ・オン・ジェム「宝石の上にいない」

すでに入力されている moveForward() の下に 、if!isOnGem を追加してください。

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

    // もし宝石の上にいないなら
    if !isOnGem {

    }
}

通常、宝石の上にいないときの isOnGemfalse です。NOT 演算子はこれを反対にするので、宝石の上にいないときの !isOnGemtrue となります。

条件が true の場合の処理を { } に入力しましょう。進んだマスに宝石がない場合は、階段を下りて宝石を取り、もとの道へ戻ります。

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

    if !isOnGem {

        // 階段を下りる
        turnLeft()
        moveForward()
        moveForward()

        // 宝石を取る
        collectGem()

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

        // 前を向く
        turnLeft()

    } 
}

4. else - 宝石の上にいるなら
今度は、 !isOnGemfalse 、つまり宝石の上にいるときの処理です。

if の後に else を追加し、 collectGem() で宝石を取りましょう。

for i in 1 ... 4 {
    moveForward()
    if !isOnGem {
        turnLeft()
        moveForward()
        moveForward()
        collectGem()
        turnLeft()
        turnLeft()
        moveForward()
        moveForward()
        turnLeft()

    } else { // 条件がfalseの場合(宝石の上にいるなら)宝石を取る
        collectGem()
    }

}

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

// コード正解例

for i in 1 ... 4 {
    moveForward()
    if !isOnGem {
        turnLeft()
        moveForward()
        moveForward()
        collectGem()
        turnLeft()
        turnLeft()
        moveForward()
        moveForward()
        turnLeft()
    } else {
        collectGem()
    }
}
宝石を全部集める
宝石を全部集める

レッスン 2「NOT で周る」

【目標】

  • 論理 NOT 演算子 ! を使う
  • 行き止まりかどうかで条件分岐する
Swift Playground/コードを学ぼう1/論理演算子/NOTで周る
Swift Playground/コードを学ぼう1/論理演算子/NOTで周る

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

// 入力済みのコード

for i in 1 ... 13 {

}

まずは何度かコードを実行してみて、以下のことを確認してください。

  • マスの並び方が変化する
  • 左に曲がる角が3つある
  • スイッチはスタート地点から13マス進んだ先にある
マスの並び方が変わる
マスの並び方が変わる

2. スイッチにたどり着くためには?
道から落ちないようにしてスイッチまで進んでいく方法を考えましょう。

  • 前にマスがあるなら、そのまま進む
  • 前にマスがないなら、左に曲がる

1マスごとに、前に進むのか、左に曲がるのかを確認しながら進んで行けるように、if / else を使ってコーディングしていきます。

3. if - 行き止まりではないなら
前に進めるかどうかは、行き止まりかどうかで調べます。前にマスがあれば「行き止まりではない」、前にマスがなければ「行き止まり」です。

今回も NOT 演算子 ! を使うレッスンなので、「もし行き止まりではないなら、進む」という意味の if 文を作りましょう。

  • !isBlocked:ノット・イズ・ブロックト「行き止まりではない」

条件 !isBlockedtrue であれば、moveForward() で進みます。

for i in 1 ... 13 {

    // もし行き止まりではないなら、進む
    if !isBlocked {
        moveForward()
    }

}

4. else - 行き止まりなら
次は、!isBlockedfalse になる場合です。前にマスがないなら進むことはできません。これを「行き止まりである」と判断します。

if の後に else を追加し、 左に曲がれるようにしましょう。

for i in 1 ... 13 {
    if !isBlocked {
        moveForward()

    } else {  // 条件がfalseの場合(行き止まりなら)

		// 左を向いて進む
        turnLeft()
        moveForward()
    }

}

ここでは、else の処理で turnLeft() だけでなく moveForward() も実行し、左を向いたあとに1マス進むようにしています。こうすることで13回のループでゴールに到達することができます。

もし else で実行するのが turnLeft() だけだと、16回ループしないとゴールできないので注意してください。理由は次のとおりです。

  • 左を向いたあとに同じマスで次のループが続き、if の処理によって前に進みます。
  • つまり、角のマスでは for ループが合計2回実行されることになります。
  • そのため、全体としては16回繰り返す必要があります。

elseturnLeft() だけを実行し、ループの回数を 16 に変更しても、もちろん OK です!

// 16回ループする場合のコード例
for i in 1 ... 16 {
    if !isBlocked {
        moveForward()
    } else {
        turnLeft() // 左を向く(同じマスにとどまる)
    }
}

5. スイッチを切り替えよう
「行き止まりではないなら前へ進み、行き止まりなら左に曲がる」という処理を for ループで繰り返したらスイッチに到着です。最後に toggleSwitch() を入力してスイッチを切り替えましょう。

6. コードを実行しよう
「コードを実行」を押して動きを確かめます。道から落ちないように進んでスイッチをオンにできたら、ステージクリアです!

// コード正解例

for i in 1 ... 13 {
    if !isBlocked {
        moveForward()
    } else {
        turnLeft()
        moveForward()
    }
}
toggleSwitch()

まとめ

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

if 文の条件に NOT 演算子 ! を使うと、「もし〇〇 ではない なら」という意味になります。ブール値の truefalse を反転するので、宝石の上にいないときや、行き止まりではないときに何かをしたい、という場合に使うことができます。

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

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

関連記事

スクラッチプログラミング - フライトシミュレーター|モバイル対応(たいおう)
Scratch で飛行機(ひこうき)がとぶうごきをつくります。マウスまたはタッチで操作(そうさ)できるモバイル対応(たいおう)のスクリプトです。キーボードなしのタブレットでもあそぶことができます。
JavaScript - ダイアログの表示方法 - alert(), confirm(), prompt()
ポップアップで表示するダイアログを3つ紹介します。ユーザーに対してメッセージを表示する alert()、確認をする confirm()、入力を求める prompt() の使い方を学びましょう。
CSS Art – How to Make a Turntable
In this article you will learn how to use Hex colors and CSS pseudo-elements. Then we’ll make a simple turntable step-by-step.
CSS Animation – Fade In and Out
Poof! Now you see it, now you don’t. Let’s learn how to make sophisticated fade effects and much more in this step-by-step article.