「每週譯 Go」如何在 Go 中編寫條件語句
介紹
條件性語句是每一種編程語言的組成部分。通過條件語句,我們可以讓代碼有時運行,有時不運行,這取決於當時程序的條件。
當我們完全執行程序的每個語句時,我們並沒有要求程序評估特定的條件。通過使用條件語句,程序可以確定某些條件是否被滿足,然後被告知下一步該做什麼。
讓我們來看看一些使用條件語句的例子。
-
如果學生的考試成績超過 65%,報告她的成績通過;如果沒有,報告她的成績不合格。
-
如果他的賬戶裏有錢,就計算利息;如果沒有,就收取罰款。
-
如果他們買了 10 個或更多的橙子,計算 5% 的折扣;如果他們買的少,就不買。
通過評估條件,並根據是否滿足這些條件來分配代碼運行,我們就是在寫條件代碼。
本教程將帶你瞭解在 Go 編程語言中編寫條件語句。
If 語句
我們將從 if
語句開始,它將評估一個語句是真的還是假的,並且只在該語句爲真的情況下運行代碼。
在一個純文本編輯器中,打開一個文件,寫入以下代碼:
package main
import "fmt"
func main() {
grade := 70
if grade >= 65 {
fmt.Println("Passing grade")
}
}
在這段代碼中,我們有一個變量grade
,並給它一個整數值70
。然後我們使用if
語句來評估變量grade
是否大於或等於(>=
)65
。如果它確實滿足這個條件,我們告訴程序打印出字符串(點擊查看往期推文) Passing grade
。
將程序保存爲grade.go
,並在終端窗口(點擊查看往期推文) 中用go run grade.go
命令運行它。
在這種情況下,70 分的成績 * 符合大於或等於 65 分的條件,因此,一旦你運行該程序,你將收到以下輸出:
Passing grade
現在讓我們改變這個程序的結果,把grade
變量的值改爲60
:
package main
import "fmt"
func main() {
grade := 60
if grade >= 65 {
fmt.Println("Passing grade")
}
}
當我們保存並運行_這個_代碼時,我們不會收到任何輸出,因爲條件 * 沒有得到滿足,我們也沒有告訴程序執行另一條語句。
再舉一個例子,讓我們計算一個銀行賬戶餘額是否低於 0。讓我們創建一個名爲account.go
的文件,並編寫以下程序:
package main
import "fmt"
func main() {
balance := -5
if balance < 0 {
fmt.Println("Balance is below 0, add funds now or you will be charged a penalty.")
}
}
當我們用go run account.go
運行該程序時,我們會收到以下輸出:
Balance is below 0, add funds now or you will be charged a penalty.
在程序中,我們將變量balance
初始化爲5
,即小於 0。由於balance
符合if
語句的條件(balance<0
),一旦我們保存並運行代碼,我們將收到字符串的輸出。同樣,如果我們把餘額改爲 0 或一個正數,我們將不會收到任何輸出。
Else 語句
我們很可能希望程序在 if
語句評估爲假時也能有所作爲。在我們的成績例子中,我們希望輸出成績是合格還是不合格。
要做到這一點,我們將在上面的成績條件中添加一個 else
語句,其結構如下:
package main
import "fmt"
func main() {
grade := 60
if grade >= 65 {
fmt.Println("Passing grade")
} else {
fmt.Println("Failing grade")
}
}
由於成績變量的值是60
,if
語句評估爲假,所以程序不會打印出Passing grade
。接下來的 else
語句告訴程序無論如何都要做一些事情。
當我們保存並運行該程序時,我們將收到以下輸出:
Failing grade
如果我們重寫程序,給成績一個65
或更高的值,我們將收到Passing grade
的輸出。
爲了給銀行賬戶的例子增加一個 else
語句,我們這樣改寫代碼:
package main
import "fmt"
func main() {
balance := 522
if balance < 0 {
fmt.Println("Balance is below 0, add funds now or you will be charged a penalty.")
} else {
fmt.Println("Your balance is 0 or above.")
}
}
Your balance is 0 or above.
在這裏,我們把balance
變量的值改爲正數,這樣else
語句就會打印出來。爲了讓第一個if
語句打印出來,我們可以把這個值改寫成一個負數。
通過將if
語句和else
語句結合起來,你就構建了一個由兩部分組成的條件語句,無論if
條件是否滿足,都會告訴計算機執行某些代碼。
Else if 語句
到目前爲止,我們已經爲條件語句提出了一個布爾(點擊查看往期推文) 選項,每個if
語句的評估結果爲真或假。在許多情況下,我們會希望一個程序能評估出兩個以上的可能結果。爲此,我們將使用 else if 語句,在 Go 中寫成else if
。else if
或 else if 語句看起來和if
語句一樣,將評估另一個條件。
在銀行賬戶程序中,我們可能希望在三種不同的情況下有三個離散的輸出。
-
餘額低於 0
-
餘額等於 0
-
餘額高於 0
else if
語句將被放在 if
語句和 else
語句之間,如下所示:
package main
import "fmt"
func main() {
balance := 522
if balance < 0 {
fmt.Println("Balance is below 0, add funds now or you will be charged a penalty.")
} else if balance == 0 {
fmt.Println("Balance is equal to 0, add funds soon.")
} else {
fmt.Println("Your balance is 0 or above.")
}
}
現在,一旦我們運行該程序,有三種可能的輸出:
-
如果變量
餘額
等於0
,我們將收到else if
語句的輸出(` 餘額等於 0,儘快添加資金。) -
如果變量
balance
被設置爲一個正數,我們將收到else
語句的輸出(你的餘額爲0或以上
)。 -
如果變量
balance
被設置爲一個負數,輸出將是if
語句的字符串(餘額低於0,現在添加資金,否則將被收取罰款
)。
如果我們想有三個以上的可能性呢?我們可以通過在代碼中寫一個以上的else if
語句來實現。
在grade.go
程序中,讓我們重寫代碼,以便有幾個字母等級對應於數字等級的範圍。
-
90 分或以上相當於 A 級
-
80-89 相當於 B 級
-
70-79 相當於 C 級
-
65-69 相當於 D 級
-
64 分或以下相當於 F 級
要運行這段代碼,我們將需要一個if
語句,三個else if
語句,以及一個處理所有失敗情況的else
語句。
讓我們重寫前面的例子中的代碼,讓字符串打印出每個字母等級。我們可以保持我們的else
語句不變。
package main
import "fmt"
func main() {
grade := 60
if grade >= 90 {
fmt.Println("A grade")
} else if grade >= 80 {
fmt.Println("B grade")
} else if grade >= 70 {
fmt.Println("C grade")
} else if grade >= 65 {
fmt.Println("D grade")
} else {
fmt.Println("Failing grade")
}
}
由於else if
語句將按順序評估,我們可以保持我們的語句相當基本。這個程序正在完成以下步驟。
-
如果成績大於 90,程序將打印 "A 級",如果成績小於 90,程序將繼續下一個語句...。
-
如果成績大於或等於 80,程序將打印 "B 級",如果成績在 79 或以下,程序將繼續下一個語句......
-
如果成績大於或等於 70,程序將打印 "C 級",如果成績是 69 或更少,程序將繼續下一個語句......
-
如果成績大於或等於 65,程序將打印 "D 級",如果成績是 64 或更少,程序將繼續下一個語句......
-
程序將打印 "成績不合格",因爲上述所有的條件都沒有滿足。
嵌套的 If 語句
一旦你對 if
, else if
, 和 else
語句感到滿意,你就可以轉到嵌套條件語句。我們可以使用嵌套的if
語句來處理這樣的情況:如果第一個條件執行爲真,我們想檢查第二個條件。爲此,我們可以在另一個 if-else 語句中設置一個 if-else 語句。讓我們來看看嵌套的if
語句的語法。
if statement1 { // outer if statement
fmt.Println("true")
if nested_statement { // nested if statement
fmt.Println("yes")
} else { // nested else statement
fmt.Println("no")
}
} else { // outer else statement
fmt.Println("false")
}
這段代碼可以產生一些可能的輸出。
- 如果
statement1
評估爲真,程序將評估nested_statement
是否也評估爲真。如果這兩種情況都是真的,那麼輸出將是:
true yes
- 然而,如果
statement1
評估爲真,但nested_statement
評估爲假,那麼輸出將是:
true no
- 而如果
statement1
評估爲 false,嵌套的 if-else 語句將不會運行,所以else
語句將單獨運行,輸出結果爲:
false
我們也可以在代碼中嵌套多個if
語句:
if statement1 { // outer if
fmt.Println("hello world")
if nested_statement1 { // first nested if
fmt.Println("yes")
} else if nested_statement2 { // first nested else if
fmt.Println("maybe")
} else { // first nested else
fmt.Println("no")
}
} else if statement2 { // outer else if
fmt.Println("hello galaxy")
if nested_statement3 { // second nested if
fmt.Println("yes")
} else if nested_statement4 { // second nested else if
fmt.Println("maybe")
} else { // second nested else
fmt.Println("no")
}
} else { // outer else
statement("hello universe")
}
在這段代碼中,除了 else if
語句外,每個 if
語句內都有一個嵌套的 if
語句。這將使每個條件內有更多的選項。
讓我們用grade.go
程序來看一個嵌套if
語句的例子。可以首先檢查一個成績是否合格(大於或等於 65%),然後評估數字成績應該相當於哪個字母等級。如果成績不合格,我們就不需要運行字母等級,而可以讓程序報告該成績不合格。修改後的代碼和嵌套的 if
語句看起來是這樣的:
package main
import "fmt"
func main() {
grade := 92
if grade >= 65 {
fmt.Print("Passing grade of: ")
if grade >= 90 {
fmt.Println("A")
} else if grade >= 80 {
fmt.Println("B")
} else if grade >= 70 {
fmt.Println("C")
} else if grade >= 65 {
fmt.Println("D")
}
} else {
fmt.Println("Failing grade")
}
}
如果我們在運行代碼時將變量grade
設置爲整數值92
,那麼第一個條件就得到了滿足,程序將打印出Passing grade of:
。接下來,它將檢查成績是否大於或等於 90,由於這個條件也被滿足,它將打印出A
。
如果我們在運行代碼時將grade
變量設置爲60
,那麼第一個條件就沒有得到滿足,所以程序將跳過嵌套的if
語句,向下移動到else
語句,程序將打印出Failing grade
。
當然,我們可以在此基礎上增加更多的選項,並使用第二層嵌套的 if 語句。也許我們想對 A+、A 和 A - 的成績分別進行評估。我們可以這樣做,首先檢查成績是否合格,然後檢查成績是否在 90 分或以上,然後檢查成績是否在 96 分以上爲 A+:
...
if grade >= 65 {
fmt.Print("Passing grade of: ")
if grade >= 90 {
if grade > 96 {
fmt.Println("A+")
} else if grade > 93 && grade <= 96 {
fmt.Println("A")
} else {
fmt.Println("A-")
}
...
在這段代碼中,對於設置爲 96 的 grade
變量,程序將運行以下程序。
-
檢查該等級是否大於或等於 65(真)。
-
打印出
Passing grade of:
-
檢查成績是否大於或等於 90(真)。
-
檢查成績是否大於 96(假)。
-
檢查等級是否大於 93,同時小於或等於 96(真)。
-
打印 "A"。
-
離開這些嵌套的條件語句,繼續執行剩餘的代碼
因此,成績爲 96 的程序的輸出看起來是這樣的:
Passing grade of: A
嵌套的if
語句可以提供機會,在你的代碼中添加幾個特定級別的條件。
總結
通過使用像 if
語句這樣的條件語句,你將對你的程序執行內容有更大的控制。條件性語句告訴程序要評估是否滿足某個條件。如果滿足條件,它將執行特定的代碼,但如果不滿足條件,程序將繼續執行其他代碼。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/siO-wn7_GlvMJJd42Bv5Uw