Goのブール論理を理解する
ブールデータ型(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
上記のコードブロックは、true
がfalse
と等しくないと評価しました。
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 > 7
と2 < 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と評価されるかどうかを示します。
句は、条件に従い、プログラムの結果を指示するコードのブロックです。 つまり、「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
。
ブール演算子は、フロー制御ステートメントを介してプログラムの最終的な結果を決定するために使用できる条件を示します。
結論
このチュートリアルでは、ブール型に属する比較演算子と論理演算子、および真理値表と、プログラムフロー制御にブールを使用する方法について説明しました。