if はブール条件を含むステートメントであり、条件が次のように評価される場合結果が true の場合は if 以降の中括弧内のコードが実行され、結果が false の場合は else 以降の中括弧内のコードが実行されます。
この記事では、if ステートメントのさまざまな構文と使用法について学びます。if condition { }
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] 上記のコード num%2 の行 9 は、num を 2 で割った余りが 0 かどうかを判断します。 num 回は偶数なので、余りは 0 となり、プログラムは「数値 10 は偶数です」と出力します。
if condition { } else { }
上記のコードでは、条件の結果が 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 の場合、ステートメントは実行されます。この場合、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 中国語 Web サイトの他の関連記事を参照してください。