写点什么

Go 学习笔记——条件判断 if

作者:为自己带盐
  • 2022 年 3 月 10 日
  • 本文字数:1325 字

    阅读完需:约 4 分钟

Go学习笔记——条件判断if

书接上回《复合数据结构之结构体》


前言之背景的别名

其实,条件判定,包括后边我将要总结记录的 for,switch 等语法,都是各类编程语言中的基本语法,只要稍微有一点基础,基本都是可以一看就明白的。

但是呢,Go 最近实在是太火了,而且,我个人也是慢慢的开始深入了解这种语言,所以本着初学者的态度,还是好好的来总结一下吧。

初识

if 语句是 Go 语言中提供的一种分支控制结构,它也是 Go 中最常用、最简单的分支控制结构。它会根据布尔表达式的值,在两个分支中选择一个执行,分支结构是传统结构化程序设计中的基础构件。


专属风格

go 中的 if 写法有自己的特点

  • if 语句的分支代码块的左大括号与 if 关键字在同一行上,这也是 Go 代码风格的统一要求;

  • if 语句的布尔表达式整体不需要用括号包裹(但是为了增加可读性或者有其他语言的书写习惯,在表达式里包上括号也没问题,而且,判定表达式多了以后,最好还是加上括号比较好),一定程度上减少了开发人员敲击键盘的次数

if book.Person.Phone == "110" {		fmt.Println("(⊙o⊙)…")}
if (book.Person.Phone) == "110" { fmt.Println("(⊙o⊙)…")}
复制代码

func main() { a, b := false,true if a && b != true { println("(a && b) != true") return } println("a && (b != true) == false") //这个例子最终输出下边这一行,因为判定条件里的!=优先级高于&&,所以先判定了b!=true这个结果是false,而 //a也是false,所以不会进入到条件内的代码块}
复制代码
  • Go 语言的 if 语句除了简单的单分支结构,还有二分支结构和多(N)分支结构,也就是 if...else...和 if ...else if...else if...else 这两种,注意,在写代码的时候,要尽量保持单分支结构,避免多分支和二分支的频繁出现,不然代码就会翔化。

  • Go 语言里支持声明 if 语句的自用变量。我们可以在 if 后的布尔表达式前,进行一些变量的声明,在 if 布尔表达式前声明的变量,我叫它 if 语句的自用变量。顾名思义,这些变量只可以在 if 语句的代码块范围内使用

func main() {    if a, c := 1, "我是内部定义的变量"; a > 0 {      println(a)    } else if b := 2; b > 0 {      println(a, b)    } else {      println(a, b, c)    }}
复制代码

if 语句的“快乐路径”原则

在日常编码中要减少多分支结构,甚至是二分支结构的使用,这会有助于我们编写出优雅、简洁、易读易维护且不易错的代码

所谓“快乐路径”也就是成功逻辑的代码执行路径,它的特点是这样的:

  • 仅使用单分支控制结构;

  • 当布尔表达式求值为 false 时,也就是出现错误时,在单分支中快速返回;

  • 正常逻辑在代码布局上始终“靠左”,这样读者可以从上到下一眼看到该函数正常逻辑的全貌;

  • 函数执行到最后一行代表一种成功状态。

Go 社区推荐 Gopher 们在使用 if 语句时尽量符合这些原则,如果你的函数实现代码不符合“快乐路径”原则,你可以按下面步骤进行重构:

  • 尝试将“正常逻辑”提取出来,放到“快乐路径”中;

  • 如果无法做到上一点,很可能是函数内的逻辑过于复杂,可以将深度缩进到 else 分支中的代码析出到一个函数中,再对原函数实施“快乐路径”原则。


好了,就这些。

发布于: 刚刚阅读数: 2
用户头像

学着码代码,学着码人生。 2019.04.11 加入

狂奔的小码农

评论

发布
暂无评论
Go学习笔记——条件判断if_Go_为自己带盐_InfoQ写作平台