我们经常需要代码在满足一定条件时进行执行,或者需要重复执行代码多次,此时需要选择条件语句(if-else if-else)或选择语句(switch case)及循环语句(for)
条件语句
段子:老婆给当程序员的老公打电话:下班顺路买十个包子,如果看到卖西瓜的,买一个。当晚老公手捧一个包子进了家门…老婆怒道:你怎么只买一个包子?!老公甚恐,喃喃道:因为我真看到卖西瓜的了。
- 老婆:买十个包子,如果有卖西瓜的,买一个西瓜
- 老公:如果有卖西瓜的,买一个包子,否则买十个包子
if

当if表达式的结果为true 则执行语句块内代码
if-else

当if表达式结果为true,则执行if语句块内代码,否则执行else语句块内代码
else if
成绩评优: [90, 100]=>优秀(A), [80, 90) => 良好(B), [60, 80) => 及格(C), [0, 60) => 不及格(D)
使用if-else语句实现

使用if-else if-else语句实现

当if表达式结果为true,则执行if语句块内代码,否则依次从上到下判断else if表达式结果,若结果为true则执行对应语句块内代码并退出if-else if-else语句,若if和else if表达式均为false,则执行else语句块内代码
初始化子语句
可以在if语句中初始化语句块内的局部变量,多个语句之间使用逗号(;)分隔

总结
对于条件语句必须有if语句,可以有0个或多个else if语句,最多有1个else语句,语句从上到下执行,执行第一个条件表达式为true的语句块并退出,否则执行else语句块退出
选择语句
根据输入条件的不同选择不同的语句块进行执行(多分支)
switch-case单值


swtich语句后面跟接变量,此时选择与变量相同的case语句块执行并退出,若所有case均不相同则执行default语句块,case语句中可包含多个不同的值进行匹配
switch-case表达式

switch后不跟接变量,此时自上到下选择第一个表达式为true的case语句块执行并退出,若所有case表达式均为false,则执行default语句块
初始化子语句
可以在switch语句中初始化语句块内的局部变量,多个语句之间使用逗号(;)分隔,注意初始化表达式时后面的逗号(;)不能省略

fallthrough
switch-case默认执行case语句后退出,若需要继续执行下一个case语句块,可以在case语句块中使用fullthrough进行声明

总结
对于选择语句可以有0个或多个case语句,最多有1个default语句,选择条件为true的case语句块开始执行并退出,若所有条件为false,则执行default语句块并退出。可以通过fallthrough修改执行退出行为,继续执行下一条的case或default语句块
循环语句
问题:计算1-100所有整数的和
for

for语句后有三个子语句分别为:初始化子语句,条件子语句和后置子语句
执行顺序为:
- 初始化子语句
- 条件子语句
- 语句块
- 后置子语句
- b->c->d
- ...
- 直到条件子语句为false结束循环
break与continue语句

- break用于跳出循环,当条件满足则结束循环
- continue用于跳过循环,当条件满足这跳过本次循环进行后置或条件子语句执行
类while
for子语句可以只保留条件子语句,此时类似于其他语言中的while循环

无限循环
for子语句全部省略,则为无限循环(死循环),s常与break结合使用

可使用ctrl+z中止程序运行

for-range
用于遍历可迭代对象中的每个元素,例如字符串,数组,切片,映射,通道等

针对包含Unicode字符的字符串遍历是需要使用for-range,range返回两个元素分别为字节索引和rune字符,可通过空白标识符忽略需要接收的变量
label与goto
可以通过goto语句任意跳转到当前函数指定的label位置

break和continue后也可以指定label用于指定跳出或跳过指定label同层级的循环

练习
乘法口诀

猜数游戏
