Goのブール論理を理解する

提供:Dev Guides
移動先:案内検索

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

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

Go forBooleanのデータ型はboolで、すべて小文字です。 値trueおよびfalseは、Goの特別な値であるため、常にそれぞれ小文字のtおよびfになります。

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

比較演算子

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

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

オペレーター その意味
== に等しい
!= 等しくない
< 未満
> より大きい
<= 以下
> = 以上

これらの演算子がどのように機能するかを理解するために、Goプログラムで2つの整数を2つの変数に割り当てましょう。

x := 5
y := 8

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

これらの2つの変数とそれに関連する値を使用して、前の表の演算子を見ていきましょう。 このプログラムでは、Goに、各比較演算子がtrueまたはfalseのどちらに評価されるかを出力するように要求します。 この出力をよりよく理解するために、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

ここでは整数が使用されていますが、float値で置き換えることができます。

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

文字列が実際にどのように比較されるかを見ることができます。

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つ以上の式が真であるかどうかを評価するために使用されます。 たとえば、成績が合格であるかどうか、および学生がコースに登録されているかどうかを判断するために使用できます。両方のケースが当てはまる場合、学生にはシステムで成績が割り当てられます。 もう1つの例は、ユーザーがストアクレジットを持っているか、過去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が返す誤った値を否定します。

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

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である必要があります。

これらの結果が不明確に思われる場合は、真理値表を調べてさらに明確にしてください。

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

!((-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が返され、(false)および(true)はfalseが返されます。

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

Outputtrue

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

真理値表

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

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

==(等しい)真理値表

x == y 戻り値
true == true true
true == false false
false == true false
false == false true

&&(および)真理値表

x y 戻り値
true true true
true false false
false true false
false false false

||(または)真理値表

x また y 戻り値
true また true true
true また false true
false また true true
false また false false

!(ではない)真理値表

| ない| x | 返品| | — | — | — | — | | ない| 真| false | | ない| false | 真|

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

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

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

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

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

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

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

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

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

結論

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