Goのブール論理について

ブールデータ型(bool)は、trueまたはfalseの2つの値のいずれかになります。 ブール値はプログラミングで比較を行い、プログラムのフローを制御するために使用されます。

ブールは、数学の論理分岐に関連付けられている真理値を表し、コンピューターサイエンスのアルゴリズムに通知します。 数学者のジョージブールにちなんで名付けられたブールという単語は、常に大文字のBで始まります。

Go for Booleanのデータ型はboolで、すべて小文字です。 値truefalseは、Goの特別な値であるため、常に小文字のtfになります。

このチュートリアルでは、ブール比較、論理演算子、真理値表など、boolデータ型がどのように機能するかを理解するために必要な基本事項について説明します。

比較演算子

プログラミングでは、comparison operatorsを使用して値を比較し、trueまたはfalseの単一のブール値まで評価します。

次の表は、ブール比較演算子を示しています。

オペレーター その意味

==

に等しい

!=

等しくない

<

未満

>

より大きい

より小さいか等しい

>=

以上

これらの演算子の仕組みを理解するために、Goプログラムの2つの変数に2つの整数を割り当てましょう。

x := 5
y := 8

この例では、xの値は5であるため、8の値を持つyよりも小さくなります。

これらの2つの変数とそれに関連する値を使用して、前の表の演算子を見てみましょう。 このプログラムでは、各比較演算子がtrueまたはfalseのどちらに評価されるかを印刷するようGoに依頼します。 この出力をよりよく理解するために、Goが評価内容を示す文字列も印刷する必要があります。

package main

import "fmt"

func main() {
    x := 5
    y := 8

    fmt.Println("x == y:", x == y)
    fmt.Println("x != y:", x != y)
    fmt.Println("x < y:", x < y)
    fmt.Println("x > y:", x > y)
    fmt.Println("x <= y:", x <= y)
    fmt.Println("x >= y:", x >= y)
}
Outputx == y: false
x != y: true
x < y: true
x > y: false
x <= y: true
x >= y: false

数学的論理に従って、Goは式から以下を評価しました。

  • 5(x)は8(y)に等しいですか? false

  • 5は8と等しくありませんか? true

  • 5は8未満ですか? true

  • 5は8よりも大きいですか? false

  • 5は8以下ですか? true

  • 5は8以下ではありませんか? false

ここでは整数を使用しましたが、整数を浮動小数点値に置き換えることもできます。

文字列はブール演算子でも使用できます。 追加の文字列メソッドを使用しない限り、大文字と小文字が区別されます。

実際に文字列を比較する方法を見ることができます:

Sammy := "Sammy"
sammy := "sammy"

fmt.Println("Sammy == sammy: ", Sammy == sammy)
OutputSammy == sammy:  false

文字列Sammyは、文字列sammyとまったく同じではないため、等しくありません。 1つは大文字のSで始まり、もう1つは小文字のsで始まります。 ただし、Sammyの値が割り当てられている別の変数を追加すると、それらは等しいと評価されます。

Sammy := "Sammy"
sammy := "sammy"
alsoSammy := "Sammy"

fmt.Println("Sammy == sammy: ", Sammy == sammy)
fmt.Println("Sammy == alsoSammy", Sammy == alsoSammy)
OutputSammy == sammy:  false
Sammy == alsoSammy true

><などの他の比較演算子を使用して、2つの文字列を比較することもできます。 Goは、文字のASCII値を使用して、これらの文字列を辞書的に比較します。

比較演算子を使用してブール値を評価することもできます。

t := true
f := false

fmt.Println("t != f: ", t != f)
Outputt != f:  true

上記のコードブロックは、truefalseと等しくないと評価しました。

2つの演算子===の違いに注意してください。

x = y   // Sets x equal to y
x == y  // Evaluates whether x is equal to y

最初の=は代入演算子であり、ある値を別の値と等しく設定します。 2番目の==は比較演算子であり、2つの値が等しいかどうかを評価します。

論理演算子

値を比較するために使用される2つの論理演算子があります。 式をブール値まで評価し、trueまたはfalseのいずれかを返します。 これらの演算子は&&||、および!であり、以下のリストで定義されています。

  • &&x && y)はand演算子です。 両方のステートメントが真の場合、それは真実です。

  • ||x || y)はor演算子です。 少なくとも1つのステートメントが真であれば、それは真実です。

  • !!x)はnot演算子です。 ステートメントが偽の場合にのみ真です。

論理演算子は通常、2つ以上の式が真であるかどうかを評価するために使用されます。 たとえば、成績が合格かどうか、学生がコースに登録されているかどうかを判断するために使用できます。両方のケースが当てはまる場合、学生はシステムで成績を割り当てられます。 別の例として、ユーザーがストアクレジットを持っているか、過去6か月間に購入したかどうかに基づいて、ユーザーがオンラインショップの有効なアクティブな顧客であるかどうかを判断します。

論理演算子の仕組みを理解するために、3つの式を評価してみましょう。

fmt.Println((9 > 7) && (2 < 4))   // Both original expressions are true
fmt.Println((8 == 8) || (6 != 6)) // One original expression is true
fmt.Println(!(3 <= 1))            // The original expression is false
Outputtrue
true
true

最初のケースであるfmt.Println((9 > 7) && (2 < 4))では、and演算子が使用されたため、9 > 72 < 4の両方がtrueと評価される必要がありました。

2番目のケースであるfmt.Println((8 == 8) || (6 != 6))では、8 == 8がtrueと評価されたため、or演算子が使用されたため、6 != 6がfalseと評価されても違いはありませんでした。 and演算子を使用した場合、これはfalseと評価されます。

3番目のケースであるfmt.Println(!(3 <= 1))では、not演算子は、3 <=1が返す偽の値を否定します。

整数の代わりにフロートを使用して、誤った評価を目指しましょう。

fmt.Println((-0.2 > 1.4) && (0.8 < 3.1))  // One original expression is false
fmt.Println((7.5 == 8.9) || (9.2 != 9.2)) // Both original expressions are false
fmt.Println(!(-5.7 <= 0.3))               // The original expression is true

この例では:

  • andには、少なくとも1つのfalse式がfalseと評価される必要があります。

  • orでは、両方の式がfalseと評価される必要があります。

  • !は、新しい式がfalseと評価されるために、その内部式がtrueである必要があります。

これらの結果が不明確に思われる場合は、さらに明確にするためにいくつかのtruth tablesを調べてください。

&&||、および!を使用して複合ステートメントを作成することもできます。

!((-0.2 > 1.4) && ((0.8 < 3.1) || (0.1 == 0.1)))

最初に最も内側の式(0.8 < 3.1) || (0.1 == 0.1)を見てください。 両方の数式がtrueであるため、この式はtrueに評価されます。

次に、Goは戻り値trueを受け取り、それを次の内部式(-0.2 > 1.4) && (true)と組み合わせます。 この例では、数学ステートメント-0.2 > 1.4がfalseであり、(false)および(true)がfalseを返すため、falseが返されます。

最後に、外部式:!(false)があります。これはtrueと評価されるため、このステートメントを出力した場合の最終的な戻り値は次のとおりです。

Outputtrue

論理演算子&&||、および!は式を評価し、ブール値を返します。

真理値表

数学の論理分岐について学ぶことはたくさんありますが、プログラミングの際のアルゴリズム思考を改善するために、その一部を選択的に学ぶことができます。

以下は、比較演算子==、および各論理演算子&&||、および!の真理値表です。 あなたはそれらを推論することができるかもしれませんが、それはあなたのプログラミングの意思決定プロセスをより速くすることができるので、それらを暗記することも役立ちます。

==(等しい)真理値表

x == y 返品

true

==

true

true

true

==

==

true

==

true

&&(および)真理値表

x and y 返品

true

and

true

true

true

and

and

true

and

||(または)真理値表

x or y 返品

true

or

true

true

true

or

true

or

true

true

or

!(not)真理値表

not x 返品

not

true

not

true

真理値表は、ロジックで使用される一般的な数学的な表であり、コンピュータープログラミングでアルゴリズム(命令)を構築する際に覚えておくと便利です。

フロー制御にブール演算子を使用する

フロー制御ステートメントの形式でプログラムのストリームと結果を制御するには、conditionの後にclauseを使用できます。

conditionは、ブール値trueまたはfalseまで評価され、プログラムで決定が行われるポイントを示します。 つまり、条件が真または偽に評価されるかどうかを通知します。

clauseは、conditionに続くコードのブロックであり、プログラムの結果を指示します。 つまり、「xtrueの場合、これを実行する」という構造の「これを実行する」部分です。

以下のコードブロックは、Goプログラムのフローを制御するために条件ステートメントと連携して動作する比較演算子の例を示しています。

if grade >= 65 {                 // Condition
    fmt.Println("Passing grade") // Clause
} else {
    fmt.Println("Failing grade")
}

このプログラムは、各生徒の成績が合格か不合格かを評価します。 成績が83の学生の場合、最初のステートメントはtrueと評価され、Passing gradeのprintステートメントがトリガーされます。 成績が59の学生の場合、最初のステートメントはfalseと評価されるため、プログラムはelse式に関連付けられたprintステートメントの実行に進みます。Failing grade

ブール演算子は、フロー制御ステートメントを介してプログラムの最終結果を決定するために使用できる条件を提示します。

結論

このチュートリアルでは、ブール型に属する比較演算子と論理演算子、および真理値表を使用して、プログラムフロー制御にブール値を使用しました。