您好,登錄后才能下訂單哦!
程序 = 數據結構 + 算法
上面這個等式每一個初學編程的同學都從老師那里聽說過。它并不是什么嚴格的數據公式,它只是對一般程序的簡單認知。數據結構是內存數據關系的靜態表示,算法是數據結構從一個狀態變化到另一個狀態需要執行的機器指令序列。數據結構是靜態的,算法是動態的。數據結構是狀態,算法是狀態的變化。
上一節我們講的變量,它是數據結構的最小單位,本節我們要講的分支與循環,它是算法邏輯的最小單位。
Go 語言的分支循環語句選擇性較少,循環語句它只有 for 循環,平時我們在其它語言用的 while 語句、do while 語句、loop 語句它是沒有的。分支語句只有 if 和 switch,也沒有三元操作符。
少并不是壞事,夠用就行。語法糖豐富了表面上選擇性多了功能強大了,但是也會增加代碼的理解成本,用戶需要掌握更多的知識才可以理解代碼,這會提高語言的學習門檻。一個經驗豐富的編程老鳥總是會傾向于用最簡單的代碼來寫出易于理解的程序來,偏方竅門奇技淫巧那是初學者膜拜的對象。
下面我們使用 if else 語句編寫一個最大函數 max 、最小函數 min 和 正負符號函數 sign。這個例子中我們要第一次引入用戶自定義的函數。
package main
import "fmt"
func main() {
fmt.Println(sign(max(min(24, 42), max(24, 42))))
}
func max(a int, b int) int {
if a > b {
return a
}
return b
}
func min(a int, b int) int {
if a < b {
return a
}
return b
}
func sign(a int) int {
if a > 0 {
return 1
} else if a < 0 {
return -1
} else {
return 0
}
}
------------
1
如果是其它語言,這種最大最小函數我們一般會使用三元操作符 a>b?a:b 一條語句搞定,不過 Go 語言沒有三元操作符,這里只能使用 if 語句,這里有那么點讓人不爽。
我們還需要注意到 if else 語句的條件居然不需要括號擴起來,有一種不穿上衣逛街的感覺。這個也是讀者們需要適應的地方,不單是 if else 語句的條件不需要括號,for 循環的條件也不需要括號,習慣就好!
哪種語言沒有 switch 語句?我所知道的只有 Python 語言,在 Python 里面你需要編寫很多的 if else 分支語句來達到 switch 的效果。Go 語言提供了 switch 語句,下面我們使用 switch 語句來編寫一個簡單的評分函數。switch 有兩種匹配模式,一種是變量值匹配,一種是表達式匹配。
package main
import "fmt"
func main() {
fmt.Println(prize1(60))
fmt.Println(prize2(60))
}
// 值匹配
func prize1(score int) string {
switch score / 10 {
case 0, 1, 2, 3, 4, 5:
return "差"
case 6, 7:
return "及格"
case 8:
return "良"
default:
return "優"
}
}
// 表達式匹配
func prize2(score int) string {
// 注意 switch 后面什么也沒有
switch {
case score < 60:
return "差"
case score < 80:
return "及格"
case score < 90:
return "良"
default:
return "優"
}
}
switch 還支持特殊的類型匹配語法,這個我們要放到后續章節來講解。
Go 語言雖然沒有提供 while 和 do while 語句,不過這兩個語句都可以使用 for 循環的形式來模擬。我們平時使用 while 語句來寫死循環 while(true) {},Go 語言可以這么寫
package main
import "fmt"
func main() {
for {
fmt.Println("hello world!")
}
}
也可以這樣寫,效果是一樣的
package main
import "fmt"
func main() {
for true {
fmt.Println("hello world!")
}
}
for 什么條件也不帶的,相當于 loop {} 語句。for 帶一個條件的相當于 while 語句。for 帶三個語句的就是普通的 for 語句。
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
fmt.Println("hello world!")
}
}
Go 語言支持 continue 和 break 語句來控制循環,這兩個語句和其它語言沒什么特殊的區別。除此之外 Go 語言還支持 goto 語句。計算機科學家迪杰斯特拉很討厭 goto 語句,他的那片廣為流傳的論文《Goto 有害》已經家喻戶曉般地為人所知,可是他已經去世這么多年了,很遺憾還是沒能阻擋 goto 語句死灰復燃般地繼續存在。
我們作為普通用戶平時還是盡量不要使用 goto 語句了,不論是誰來 review 你的代碼只要是看到了 goto 語句肯定會發發牢騷的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。