「每週譯 Go」瞭解 Go 中的布爾邏輯

布爾數據類型(bool)可以是兩個值中的一個,即。布爾型數據在編程中被用來進行比較和控制程序的流程。

Boolean 在 Go 中的數據類型是bool,全部小寫。值 true 和 false 總是分別用小寫的 t 和 f,因爲它們是 Go 中的特殊值。

本教程將涵蓋你需要了解 bool 數據類型如何工作的基礎知識,包括布爾比較、邏輯運算符和真值表。

比較運算符

在編程中,比較運算符被用來比較數值,並計算爲一個單一的布爾值,即真或假。

下表展示了布爾比較運算符。

運算符的含義

== 等於

!= 不等於

< 少於

> 大於

<= 少於等於

>= 大於等於

爲了瞭解這些運算符的工作原理,我們在 Go 程序中把兩個整數分配給兩個變量:

x := 5
y := 8

在這個例子中,由於 x 的值是5y 的值是 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 從表達式中計算了以下內容:

雖然這裏使用的是整數,但你可以用浮點數來代替。

字符串也可以和布爾運算符一起使用。它們是區分大小寫的,除非你使用一個額外的字符串方法。

你可以看一下字符串在實踐中是如何比較的:

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

在這個例子中:

如果這些結果對你來說不清楚,可以通過一些真值表來進一步澄清。

你也可以用 &&|| 和  來寫複合語句:

!((-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