↑ 雪兔哥,先不要
在進入今天的課程之前我想補充一下 Golang 變數的特性,可能有人有發現,當 Golang 宣告的變數沒有使用時,編譯器就會噴錯,在一般的程式語言中(rust除外)通常都不會有這種情形,但是這樣子的設計可以避免魔法使在製作大張Golang牌時不斷修改咒語的情況下,沒有把那些宣告了又不用的變數刪除掉。
package main
import "fmt"
func main(){
a := "ほら Catch You Catch You"
b := "Catch Me Catch Me 待って"
fmt.Println(a)
}
執行結果:
b declared and not used
翻譯年糕:b 宣告了但沒有被使用
各位魔法使們目前為止應該能大致了解變數和Print的使用了,但是,我們的程式只能從一開始逐行執行?有沒有什麼方法是可以做到「選擇」的方法呢?
請設計一支程式在
num
大於 10 的時候印出小可
在Golang中,要能在「一定條件下做特定的事」,就要使用 if
來實現,if
的意思就是如果。請觀察下面這支程式
package main
import "fmt"
func main(){
num := 20
if(num > 10){
fmt.Println("小可")
}
}
執行結果:
小可
直接看的話應該就能懂了,當 num > 10
程式就會執行 { }
間的程式碼。各位初學者可以試著把 num
調成其他值。
如果今天想要實現一支程式在
num
大於 10 的時候印出小可
,否則印出小櫻
這時就要再介紹一個關鍵字,叫 else
中文稱「否則」,直接看範例應該就能懂了
package main
import "fmt"
func main(){
num := 5
if num > 10 {
fmt.Println("小可")
}else{
fmt.Println("小櫻")
}
}
執行結果:
小櫻
當 num > 10
這個條件沒有通過時,程式就會往 else 走,並進入 { }
裡面
如果今天想要實現一支程式在
num
大於 10 的時候印出小可
,否則(沒大於 10 時),如果大於5
印出小櫻
package main
import "fmt"
func main(){
num := 8
if num > 10 {
fmt.Println("小可")
}else{
if num > 5 {
fmt.Println("小櫻")
}
}
}
執行結果:
小櫻
這時你可以在否則的情況下再塞入一個 if{}
來控製程式,因為現在我們設定 num
是 8,因為第5行 8 > 10
是錯的所以程式會直接來到第7行,進入第8行檢查 8 有沒有大於 5,因為 8 > 5
是對的,所以程式進入第9行並印出小櫻
因為這樣寫比較麻煩,所以可以把程式碼精簡成:
package main
import "fmt"
func main(){
num := 8
if num > 10 {
fmt.Println("小可")
}else if num > 5 {
fmt.Println("小櫻")
}
}
而 if
else if
else
可以不斷串接
實現一支程式在
num
等於 1 的時候印出小可
,等於2
時印出小櫻
等於3
時印出知世
否則印出桃矢
package main
import "fmt"
func main(){
num := 8
if num == 1 {
fmt.Println("小可")
}else if num == 2 {
fmt.Println("小櫻")
}else if num == 3{
fmt.Println("知世")
}else{
fmt.Println("桃矢")
}
}
執行結果:
桃矢
if
- else if
究竟是以什麼方式做為要不要進入 { }
呢
其實在做比較時 >
(大於), ==
(等於), <
(小於), >=
(大於等於), <=
(小於等於),會產生一個值,稱為「布林值」(boolean),這個值只有兩種:「真」(true)、「假」(flase)
我們常常說「真的假的」,就是把兩種布林值講了一遍
這次,我們直接將在 if
右邊的條件換成布林變數看看
package main
import "fmt"
func main(){
// 宣告布林變數
var a bool
a = true
if a {
fmt.Println("a is true")
}else{
fmt.Println("a is false")
}
}
執行結果:
a is true
package main
import "fmt"
func main(){
var a bool
a = false
if a {
fmt.Println("a is true")
}else{
fmt.Println("a is false")
}
}
執行結果:
a is false
布林還能有什麼運算呢?首先要有 not
也就是讓 true
變false
,false
變 true
只要在布林變數前加上 !
就可以實現
package main
import "fmt"
func main(){
// 利用 := 快速宣告
a := true
fmt.Println(!a)
fmt.Printf("%t", !a)
}
執行結果:
false
false
布林變數可以直接印出,若要用 Printf 來印出可以用 %t
t
是指 true
因為 %b
的 b 被拿去當 binary 印二進位了,所以要印出布林變數要用 %t
當兩件事情同時是 true
時則 AND
的結果也是 true
,AND 可以用中文想成「而且」,在 Golang 及大多數程式語言中(python除外),我們用 &&
來表示「而且」,舉個例子
小可是封印之獸「而且」小櫻是庫洛魔法使
所以:小可是封印之獸「而且」小櫻是庫洛魔法使→也是對的
但今天若換成
小可有雙眼皮「而且」小櫻是庫洛魔法使
那麼:小可有雙眼皮「而且」小櫻是庫洛魔法使→則是錯的
package main
import "fmt"
func main(){
fmt.Println(false && false)
fmt.Println(false && true)
fmt.Println(true && false)
fmt.Println(true && true)
}
執行結果:
false
false
false
true
當兩件事情只要有一件是 true
時,則 OR
的結果就會 true
,AND 可以用中文想成「或者」,在 golang 及大多數程式語言中,我們用 ||
來表示「或者」,舉個例子
小櫻是啦啦隊「或者」知世是合唱團
所以:小櫻是啦啦隊「或者」知世是合唱團→也是對的
今天若換成
小櫻是學生會會長「或者」知世是合唱團
雖然只有條件 2 對,但因為是「或者」,所以:小櫻是學生會會長「或者」知世是合唱團→是對的
今天若換成
小櫻是學生會會長「或者」知世是熱舞社的
在兩件都是錯的情況下:小櫻是學生會會長「或者」知世是熱舞社的→是錯的
package main
import "fmt"
func main(){
fmt.Println(false || false)
fmt.Println(false || true)
fmt.Println(true || false)
fmt.Println(true || true)
}
執行結果:
false
true
true
true
試著實作一支程式,給定一個數字
num
型態int
,能在num
是偶數時印出even
在num
是奇數時印出odd
要判斷奇偶數的方法可以先利用 %
的方法取餘數,但是這個部份我前天忘記教,但已經補上了:#2 零與壹的魔法世界 ── 宣告數字型態的變數 | Golang魔法使
package main
import "fmt"
func main(){
num := 10
if num % 2 == 1{
fmt.Println("odd")
}else{
fmt.Println("even")
}
}
試著實作一支程式,給定一個數字
num
型態int
,能在num
是正數時印出+
在num
是負數時印出-
否則若都不是印出0
當一次要比較同一個變數很多次時,可以改用 switch case
改寫
實現一支程式在
num
等於1
的時候印出小可
,等於2
時印出小櫻
等於3
時印出知世
否則印出桃矢
package main
import "fmt"
func main(){
num := 3
switch num {
case 1:
fmt.Println("小可")
case 2:
fmt.Println("小櫻")
case 3:
fmt.Println("知世")
default:
fmt.Println("桃矢")
}
}
執行結果:
知世
default
可有可無,其功能類似於 else
,另外要提到一點在Golang魔法中,使用 switch-case
不需要搭配 break
,常見經典的魔法比如 C, C++, Java, PHP, Javascritp 這些經典的魔法都必需要加 break
;比較現代的魔法則有很多類似的語法,也不用加 break
比如Rust的 match
、Kotlin 的 when
、Coffeescript 的 switch-when-then
...
另外,如果想要用
switch-case
實現:
如果num
是 1 或者是 2 時要印出小可
是 3 或者 4 時要印出小櫻
又要怎麼達成呢?
package main
import "fmt"
func main(){
num := 3
switch num {
case 1:
fmt.Println("小可")
case 2:
fmt.Println("小可")
case 3:
fmt.Println("小櫻")
case 4:
fmt.Println("小櫻")
}
}
在這種情況下可以精簡成下面這種寫法
package main
import "fmt"
func main(){
num := 2
switch num {
case 1, 2:
fmt.Println("小可")
case 3, 4:
fmt.Println("小櫻")
}
}
更多switch-case用法
5 switch statement patterns
邏輯運算是非常直覺易懂的事,如果你覺得很難懂,那你可能很適合當法官。
吸毒→有罪
殺人→有罪
先吸毒後殺人→無罪
法官邏輯真他媽好
https://www.setn.com/News.aspx?NewsID=802491
本文多數圖片來自: