#if 是具有布林條件的語句,如果該條件的計算結果為true,將會執行if 後面大括號裡的程式碼,如果結果為false,則會執行else 後大括號裡的程式碼。
透過這篇文章,我們會學習了解 if 語句的各種語法和使用方法。
if 語句的語法如下所示:
if condition { }
如果判斷condition 為true,則執行大括號{} 之間的代碼。
與 C 等其他語言不同,大括號 {} 是強制性的,即使大括號之間只有一行程式碼。
讓我們寫一個簡單的程式來判斷一個數字是偶數還是奇數。
package main import ( "fmt" ) func main() { num := 10 if num%2 == 0 { //checks if number is even fmt.Println("The number", num, "is even") return } fmt.Println("The number", num, "is odd") }
執行[1]
上面程式碼第9 行num%2 判斷num 除以2 餘數是否為0,因為num 次數偶數,所以餘數為0,程式輸出The number 10 is even。
#if 語句有對應的 else 分支,如果 condition 結果為 false,則會執行 else 分支。
if condition { } else { }
在上面的程式碼,如果 condition 結果為 false,則 else 分支 {} 之間的程式碼行將會執行。
讓我們使用 if-else 語句重寫程式來判斷數字是奇數還是偶數。
package main import ( "fmt" ) func main() { num := 11 if num%2 == 0 { //checks if number is even fmt.Println("the number", num, "is even") } else { fmt.Println("the number", num, "is odd") } }
執行[2]
在上面的程式碼中,我們沒有在條件為true 時直接傳回,而是建立了else 語句,當條件為false 時,將執行該語句。在我們這個 case 中,由於 11 是奇數,因此 if 條件為 false,所以會執行 else 語句中的程式碼。
上面代码执行输出:
the number 11 is odd
if 语句不仅有 else 分支,还可以有 else-if 分支,语法如下:
if condition1 { ... } else if condition2 { ... } else { ... }
代码执行时会从上之下判断每个分支的 condition 是否为 true。
上面的代码,如果 condition1 为 true,将会执行 condition1 后面 {} 之间的代码;
如果 condition1 为 false 且 condition2 为 true,则会执行 condition2 后面 {} 之间的代码;
如果 condition1 和 condition2 都为 false,则会执行 else 后面 {} 之间的代码。
可以有任意数量的 else-if 语句块。
通常,只要 if 和 else-if 语句有一个 condition 为 true,就会执行相应的代码块,如果没有为 true 的情况则会执行 else 分支的代码。
我们使用 else-if 语句编写一段程序:
package main import ( "fmt" ) func main() { num := 99 if num <= 50 { fmt.Println(num, "is less than or equal to 50") } else if num >= 51 && num <= 100 { fmt.Println(num, "is between 51 and 100") } else { fmt.Println(num, "is greater than 100") } }
执行[3]
上面的代码,else if num >= 51 && num <= 100 条件为 true,所以执行输出:
99 is between 51 and 100
if 语句的一种变体是在判断条件之前,可以有短变量声明语句,语法如下:
if assignment-statement; condition { }
上面的代码片段,短变量声明语句会优先执行。
我们用上面的语法重写代码来判断数字是偶数还是奇数。
package main import ( "fmt" ) func main() { if num := 10; num % 2 == 0 { //checks if number is even fmt.Println(num,"is even") } else { fmt.Println(num,"is odd") } }
执行[4]
上面代码第 8 行,变量 num 在 if 语句中被初始化,
需要注意的是,num 的作用域仅限于 if-else 语句块内,即如果我们在 if-else 之外访问 num,编译器将会报错。
当我们仅仅想声明一个只在 if-else 内部使用的变量时,这种语法就可以派上用场,可确保变量的作用范围仅在 if-else 语句内。
else 语句应该在 if 语句的右大括号 } 之后的同一行开始。如果不是,会编译报错。
写一小段程序理解下:
package main import ( "fmt" ) func main() { num := 10 if num % 2 == 0 { //checks if number is even fmt.Println("the number is even") } else { fmt.Println("the number is odd") } }
执行[5]
上面代码的第 11 行,else 语句没有紧跟着 if 语句的 } 后面 ,相反,它是另起新的一行开始。如果你执行程序编译器将会报错。
./prog.go:12:5: syntax error: unexpected else, expecting }
报错的原因在于 Go 会自动插入分号,关于插入分号的规则可以点击这里[6]查看更多信息。
其中有一项规则,如果一行代码以 } 结束,则会在 } 后面自动加上分号,所以上面代码第 11 行,会被编译器在 } 后面自动加上分号。
我们的代码就变成了:
... if num%2 == 0 { fmt.Println("the number is even") }; //semicolon inserted by Go Compiler else { fmt.Println("the number is odd") }
由于 if-else 是一个独立的语句,中间不应出现分号,因此,程序编译会报错。因此,将 else 紧跟在 if 语句的右大括号 } 之后是语法要求。
正确格式的代码如下:
package main import ( "fmt" ) func main() { num := 10 if num%2 == 0 { //checks if number is even fmt.Println("the number is even") } else { fmt.Println("the number is odd") } }
执行[7]
我们已经学习了各种 if-else 语句,针对同一功能可以用这些不同语句编写出不同的实现方法。例如,我们使用 if-else 语句及其变体实现了不同的方式去判断一个数字是奇数还是偶数。你可能会问,哪种方式才是 Go 语言常用的方式呢?
在 Go 的设计哲学中,最好避免不必要的分支和代码缩进。执行时尽早返回也被认为是更好的。
再来展示下之前的代码:
package main import ( "fmt" ) func main() { if num := 10; num % 2 == 0 { //checks if number is even fmt.Println(num,"is even") } else { fmt.Println(num,"is odd") } }
按照 Go 语言的设计哲学该如何编写上述的代码呢?应该尽量避免 else 分支;如果 if 语句的条件为 true,则应尽早执行 return 返回。
就像下面这样:
package main import ( "fmt" ) func main() { num := 10; if num%2 == 0 { //checks if number is even fmt.Println(num, "is even") return } fmt.Println(num, "is odd") }
执行[8]
在上面代码中,一旦我们发现数字是偶数,就立即返回,就避免了不必要的 else 分支。这就是 Go 语言的哲学 -- “大道至简”,尽量追求代码简洁。
以上是Go 語言基礎 - if-else的詳細內容。更多資訊請關注PHP中文網其他相關文章!