网站源码网址修改,如何网站做外贸生意,凡科网门店通,深圳市住房和建设局官方网站查阅今天#xff0c;我想谈谈相当简单的事情。我不会发明什么#xff0c;但我在生产代码中经常看到这样的事情#xff0c;所以我不能回避这个话题。
我经常要解开多个复杂的 if else 结构。多余的缩进、过多的逻辑只会加深理解。首先#xff0c;这篇文章的主要目的是让代码更透…今天我想谈谈相当简单的事情。我不会发明什么但我在生产代码中经常看到这样的事情所以我不能回避这个话题。
我经常要解开多个复杂的 if else 结构。多余的缩进、过多的逻辑只会加深理解。首先这篇文章的主要目的是让代码更透明、更易读。不过在某些情况下还是必须使用这些操作符。
else 操作
例如我们有简单的用户处理程序
func handleRequest(user *User) {if user ! nil {showUserProfilePage(user)} else {showLoginPage()}
}如果没有提供用户则需要将收到的请求重定向到登录页面。If else 似乎是个不错的决定。但我们的主要任务是确保业务逻辑单元在任何输入情况下都能正常工作。因此让我们使用提前返回来实现这一点。
func handleRequest(user *User) {if user nil {return showLoginPage()} showUserProfilePage(user)
}逻辑是一样的但是下面的做法可读性会更强。
break 操作
对我来说Break 和 Continue 语句总是可以分解的信号。
例如我们有一个简单的搜索任务。找到目标并执行一些业务逻辑或者什么都不做。
func processData(data []int, target int) {for i, value : range data {if value target {performActionForTarget(data[i])break}}
}你应该始终记住使用 break 操作符并不能保证整个数组都会被处理。这对性能有好处因为我们丢弃了不必要的迭代但对代码支持和可读性不利。因为我们永远不知道程序会在列表的开头还是结尾停止。
在某些情况下带有子任务的简单功能可能会破坏这段代码。
func processData(data []int, target int, subtask int) {for i, value : range data {if value subtask {performActionForSubTarget(data[i])}if value target {performActionForTarget(data[i])break}}
}这样我们实际上可以拆出一个 find 的方法
func processData(data []int, target int, subTarget int) {found : findTarget(data, target)if found notFound {performActionForTarget(found)}found findTarget(data, subTarget)if found notFound {performActionForSubTarget(found)}
}const notFound -1func findTarget(data []int, target int) int {if len(data) 0 {return notFound}for _, value : range data {if value target {return value}}return notFound
}同样的逻辑但是拆分成更细粒度的方法也有精确的返回语句可以很容易地通过测试来实现。
continue 操作
该操作符与 break 类似。为了正确阅读代码您应该牢记它对操作顺序的具体影响。
func processWords(words []string, substring string) {for _, word : range words {if !strings.Contains(word, substring) {continue}// do some buisness logicperformAction(word)}
}Continue 使得这种简单的流程变得有点难以理解。
让我们写得更简洁些
func processWords(words []string, substring string) {for _, word : range words {if strings.Contains(word, substring) {performAction(word)}}
}关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等您的关注将是我的更新动力