抽象的艺术:Go 语言中的编程哲学
原创 TimLiu 爱发白日梦的后端 2024-03-25 07:00 广东 1人听过爱发白日梦的后端 专注 Go 语言领域的发展,学习成为更牛逼的架构师,日常分享 Go 语言、架构、软件工具的使用。 179篇原创内容 公众号
点击上方“名片”,关注公众号,加群可获得我整理的海量资料
在编程的世界里,抽象是一种艺术,它不仅仅是隐藏实现细节的技巧,更是一种提升代码质量和理解性的哲学。让我们一起探索抽象的深层含义,并看看如何在 Go 语言中实践这一概念。
抽象:不只是隐藏
抽象是编程中的一个重要概念,它帮助我们隐藏数据的背景细节,只展示用户所需的信息。然而,抽象的意义远不止于此。正如 Dijkstra 所说:
★抽象的目的不是为了含糊不清,而是为了创造一个新的语义层次,在这个层次上,人们可以做到绝对精确。
这个新的语义层次,就是抽象的真正魅力所在。它让我们能够用更少的词汇,更精确地描述复杂的事物。
抽象的实践:Go 语言的例子
让我们通过一个简单的例子来理解抽象的力量。假设我们有三支队伍——猫队、狗队和海狸队——它们在进行比赛。每场比赛的获胜队伍可以获得 3 分,最终得分最高的队伍将成为赢家。
下面的代码实现了一个简单的比赛获胜者计算器:
package main
import "fmt"
func main() {
competitions := [][]string{
{"Cats", "Dogs"},
{"Dogs", "Beavers"},
{"Beavers", "Cats"},
}
results := []int{0, 0, 1}
fmt.Println(TournamentWinner(competitions, results)) // 输出获胜者
}
func TournamentWinner(competitions [][]string, results []int) string {
var currentWinner string
scores := make(map[string]int)
for _, competition := range competitions {
homeTeam, awayTeam := competition[0], competition[1]
if results[0] == 1 {
scores[homeTeam] += 3
if scores[homeTeam] > scores[currentWinner] {
currentWinner = homeTeam
}
}
// ... 其他比赛逻辑
}
return currentWinner
}
这段代码虽然能够工作,但它的逻辑并不清晰。我们需要的是一个更高层次的抽象,能够让我们清楚地表达比赛的逻辑。
提升抽象层次
为了提升代码的抽象层次,我们可以引入一个新的函数 getWinner
,它负责从比赛结果中提取获胜队伍,并更新得分:
func getWinner(competition []string, result int) string {
homeTeam, awayTeam := competition[0], competition[1]
winningTeam := awayTeam
if result == 1 {
winningTeam = homeTeam
}
return winningTeam
}
func TournamentWinner(competitions [][]string, results []int) string {
var currentWinner string
scores := make(map[string]int)
for _, competition := range competitions {
winningTeam := getWinner(competition, results[0])
currentWinner = updateWinner(winningTeam, scores, currentWinner)
}
return currentWinner
}
func updateWinner(winningTeam string, scores map[string]int, currentWinner string) string {
scores[winningTeam] += 3
if scores[winningTeam] > scores[currentWinner] {
currentWinner = winningTeam
}
return currentWinner
}
通过这样的抽象,我们的代码变得更加清晰和易于理解。每个函数都有一个明确的目的,整个程序的逻辑也更加直观。
结语
抽象是编程中的一种强大工具,它不仅能够帮助我们简化代码,还能够提升我们的思考层次。在 Go 语言中,通过合理的抽象,我们可以编写出既简洁又富有表现力的代码。记住,抽象的艺术在于找到适当的平衡点,既不过于复杂,也不过于简化。让我们一起在编程的道路上,追求更高的抽象层次吧!
如果你也认可,请为它点赞。
也欢迎大家加入我创建技术交流群,交个朋友~
在交流群里,有问题可以咨询我哈,我也会分享技术、搞钱等信息,一起加油~
TimLiu go127 阅读 422 爱发白日梦的后端 分享此内容的人还喜欢 软件架构的23个基本原则 我看过的号 DeepNoMind 不看的原因- 内容低质
- 不看此公众号内容
- 内容低质
- 不看此公众号内容
- 内容低质
- 不看此公众号内容
人划线
标签:winningTeam,string,编程,抽象,scores,Go,currentWinner From: https://www.cnblogs.com/cheyunhua/p/18100508