「每週譯 Go」瞭解 Go 中的布爾邏輯
布爾數據類型(bool
)可以是兩個值中的一個,即真或假。布爾型數據在編程中被用來進行比較和控制程序的流程。
Boolean 在 Go 中的數據類型是bool
,全部小寫。值 true
和 false
總是分別用小寫的 t
和 f
,因爲它們是 Go 中的特殊值。
本教程將涵蓋你需要了解 bool
數據類型如何工作的基礎知識,包括布爾比較、邏輯運算符和真值表。
比較運算符
在編程中,比較運算符被用來比較數值,並計算爲一個單一的布爾值,即真或假。
下表展示了布爾比較運算符。
運算符的含義
==
等於
!=
不等於
<
少於
>
大於
<=
少於等於
>=
大於等於
爲了瞭解這些運算符的工作原理,我們在 Go 程序中把兩個整數分配給兩個變量:
x := 5
y := 8
在這個例子中,由於 x
的值是5
,y
的值是 8
,所以 x
小於 y
。
使用這兩個變量和它們的相關值,讓我們回憶一下之前的運算符。在這個程序中,你用 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)
}
Output
x == y: false
x != y: true
x < y: true
x > y: false
x <= y: true
x >= y: false
遵循數學邏輯,Go 從表達式中計算了以下內容:
-
5(
x
)等於 8(y
)嗎?假 -
5 不等於 8 嗎?真
-
5 小於 8 嗎?真
-
5 是否大於 8?假
-
5 是否小於或等於 8?真
-
5 不小於或等於 8 嗎?假
雖然這裏使用的是整數,但你可以用浮點數來代替。
字符串也可以和布爾運算符一起使用。它們是區分大小寫的,除非你使用一個額外的字符串方法。
你可以看一下字符串在實踐中是如何比較的:
Sammy := "Sammy"
sammy := "sammy"
fmt.Println("Sammy == sammy: ", Sammy == sammy)
Output
Sammy == sammy: false
字符串 Sammy
不等於字符串 sammy
,因爲它們不完全相同;一個以大寫字母 S
開頭,另一個以小寫字母 s
開頭。但是,如果你添加了另一個變量,該變量被分配了 Sammy
的值,那麼它們的值將相等。
Sammy := "Sammy"
sammy := "sammy"
alsoSammy := "Sammy"
fmt.Println("Sammy == sammy: ", Sammy == sammy)
fmt.Println("Sammy == alsoSammy", Sammy == alsoSammy)
Output
Sammy == sammy: false
Sammy == alsoSammy true
你還可以使用其他比較運算符,包括 >
和 <
來比較兩個字符串。Go 將使用字符的 ASCII 值對這些字符串進行按字母順序的比較。
你也可以用比較運算符計算布爾值:
t := true
f := false
fmt.Println("t != f: ", t != f)
Output
t != f: true
前面的代碼塊計算了 true
不等於 false
。
注意兩個運算符 =
和 ==
之間的區別。
x = y // Sets x equal to y
x == y // Evaluates whether x is equal to y
第一個 =
是賦值運算符,它將設置一個值等於另一個值。第二個 ==
是一個比較運算符,將評估兩個值是否相等。
邏輯運算符
有兩個邏輯運算符被用來比較數值。它們將表達式評估爲布爾值,返回 true
或 false
。這些運算符是 &&
,||
,和 !
,下面的列表中爲定義:
&& (x && y
) 是 and
運算符。如果兩個語句都是真,它就是真。
|| (x || y
) 是 or
運算符。如果至少有一個語句是真,它就是真。
! (!x
) 是 not
運算符。只有當語句爲假時,它才爲真。
邏輯運算符通常用於計算兩個或多個表達式是真還是假。例如,它們可以用來確定成績是否合格,以及學生是否在課程中註冊,如果這兩種情況都是真,那麼該學生將在系統中被分配一個成績。另一個例子是根據用戶是否有商店信用或在過去 6 個月內有購買行爲,來確定用戶是否是一個網上商店的有效活躍客戶。
爲了理解邏輯運算符的工作原理,我們來評估三個表達式:
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
Output
true
true
true
在第一種情況下,fmt.Println((9 > 7) && (2 < 4))
,9 > 7
和 2 < 4
都計算爲真,因爲使用了and
運算符。
在第二種情況下,fmt.Println((8 == 8) || (6 != 6))
,由於8 == 8
爲真,6 != 6
爲假,因爲使用了 or
運算符所以結果爲真。如果你使用的是 and
運算符,那麼這個結果將是假。
在第三種情況下,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
必須至少有一個假則計算爲假。 -
or
必須兩個表達式都爲假則計算爲假。 -
!
必須使其內部表達式爲真,新表達式才爲假。
如果這些結果對你來說不清楚,可以通過一些真值表來進一步澄清。
你也可以用 &&
、||
和 !
來寫複合語句:
!((-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
,所以如果我們把這個語句打印出來,最後的返回值是:
Output
true
邏輯運算符 &&
、||
和 !
用於計算並返回布爾值。
真值表
關於數學的邏輯分支,有很多東西需要學習,但你可以有選擇地學習一些,以提高你編程時的算法思維。
下面是比較運算符 ==
,以及每個邏輯運算符 &&
,||
和 !
的真值表。雖然你可能能夠推理出它們,但記住它們也是有幫助的,因爲這可以使你的編程決策過程更快。
==
(equal) 真值表
x == y 返回
true == true true
true == false false
false == true false
false == false true
&&
(and) 真值表
x and y 返回
true and true true
true and false false
false and true false
false and false false
||
(or) 真值表
x or y 返回
true or true true
true or false true
false or true true
false or false false
!
(not) 真值表
not x Returns
not true false
not false true
真值表是邏輯學中常用的數學表,在構建計算機編程中的算法(指令)時,真值表是很有用的,可以牢記在心。
使用布爾運算符進行流程控制
爲了以流程控制語句的形式控制程序的流程和結果,你可以使用一個 condition 和一個 clause 。
一個 condition 計算出一個布爾值的真或假,提出了一個在程序中做出決定的點。也就是說,一個條件會告訴你某個東西的值是真還是假。
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 表達式相關的打印語句:Failing grade
。
布爾運算符提出的條件,可以通過流程控制語句來決定程序的最終結果。
總結
本教程介紹了屬於布爾類型的比較和邏輯運算符,以及真值表和使用布爾類型進行程序流程控制。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/BFAsVdEXQmteSTpBNDARIg