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

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

Go for Booleanのデータ型は、すべて小文字の「+ bool 」です。 値 ` true `と ` false `は、Goの特別な値であるため、常に小文字の ` t `と ` f +`になります。

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

比較演算子

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

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

Operator What it means

==

Equal to

!=

Not equal to

<

Less than

>

Greater than

Less than or equal to

>=

Greater than or equal to

これらの演算子の仕組みを理解するために、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 +)と等しいですか?

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

  • 5は8未満ですか? * true *

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

  • 5は8以下ですか? * true *

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

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

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

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

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

上記のコードブロックは、「+ true」が「+ false」と等しくないことを評価しました。

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

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

最初の「+ = 」は代入演算子で、1つの値を別の値に等しく設定します。 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))+、 `+ 9> 7 +`と `+2 <4 +`の両方が、 ` + and + `演算子が使用されました。

2番目のケースでは、 + fmt.Println((8 == 8)||(6!= 6))++ 8 == 8 +`がtrueと評価されたため、 ` +6!= 6 + `は、 + or + `演算子が使用されたため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 [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 +)と( + true +)が `+ false `を返すため、 ` false +`を返します。

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

Outputtrue

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

真理値表

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

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

+ == +(等しい)真理値表

x == y Returns

true

==

true

true

true

==

false

false

false

==

true

false

false

==

false

true

+ && +(および)真理値表

x and y Returns

true

and

true

true

true

and

false

false

false

and

true

false

false

and

false

false

+ || +(または)真理値表

x or y Returns

true

or

true

true

true

or

false

true

false

or

true

true

false

or

false

false

(ではない)真理値表

not x Returns

not

true

false

not

false

true

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

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

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

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

_clause_は、_condition_に続くコードのブロックであり、プログラムの結果を指示します。 つまり、これは「 `+ x `が ` true +`の場合、これを行う」という構成の「これを行う」部分です。

以下のコードブロックは、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 +」を実行します。

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

結論

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