Goのブール論理を理解する
ブールデータ型(bool
)は、trueまたはfalseの2つの値のいずれかになります。 ブール値は、プログラミングで比較を行い、プログラムのフローを制御するために使用されます。
ブール値は、数学の論理ブランチに関連付けられている真理値を表します。これは、コンピューターサイエンスのアルゴリズムに情報を提供します。 数学者ジョージブールにちなんで名付けられたブールという単語は、常に大文字で始まります B
.
GoforBooleanのデータ型は bool
、すべて小文字。 その価値 true
と false
常に小文字になります t
と f
それぞれ、Goの特別な値です。
このチュートリアルでは、どのように理解する必要があるかを理解するために必要な基本事項について説明します。 bool
ブール比較、論理演算子、真理値表などのデータ型が機能します。
比較演算子
プログラミングでは、比較演算子を使用して値を比較し、trueまたはfalseの単一のブール値まで評価します。
次の表は、ブール比較演算子を示しています。
オペレーター | その意味 |
---|---|
== | に等しい |
!= | 等しくない |
< | 未満 |
> | より大きい |
<= | 以下 |
> = | 以上 |
これらの演算子がどのように機能するかを理解するために、Goプログラムで2つの整数を2つの変数に割り当てましょう。
x := 5
y := 8
この例では、 x
の値があります 5
、それは未満です y
の値があります 8
.
これらの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
と他の小文字 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
最初 =
は代入演算子であり、ある値を別の値と等しく設定します。 二番目、 ==
は比較演算子であり、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))
、 両方 9 > 7
と 2 < 4
以来、真と評価する必要がありました and
演算子が使用されました。
2番目のケースでは、 fmt.Println((8 == 8) || (6 != 6))
、 以来 8 == 8
真と評価されたが、それは違いを生まなかった 6 != 6
はfalseと評価されます or
演算子が使用されました。 あなたが使用した場合 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)
. この例は false
数学的なステートメントのため -0.2 > 1.4
は偽であり、(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と評価されるかどうかを示します。
句は、条件に従い、プログラムの結果を指示するコードのブロックです。 つまり、これは構造の「これを行う」部分です。 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
.
ブール演算子は、フロー制御ステートメントを介してプログラムの最終的な結果を決定するために使用できる条件を示します。
結論
このチュートリアルでは、ブール型に属する比較演算子と論理演算子、および真理値表と、プログラムフロー制御にブールを使用する方法について説明しました。