做决定:如果这样,就那样
到目前为止,程序可能感觉像一份菜谱,永远按同样的顺序做完全一样的步骤。但现实生活不是这样——如果下雨你就带伞,否则就把伞留在家里。条件(conditional)就是你给程序装上这种常识的方式:它看看某件事是不是真的,然后挑一条路走。
在代码里,这几乎总是用 if(如果)和 else(否则)这两个词。你写下 `if`,后面跟一个只能回答「是」或「否」的问题——比如「分数高于 60 吗?」——再写上答案为「是」时要做的那段事。`else` 部分是可选的:它是兜底,也就是答案为「否」时该做什么。
if (score >= 60) {
print("You passed!")
} else {
print("Try again.")
}重复:再做一次,再做一次
电脑最擅长的就是毫无怨言地做枯燥的事。假设你要给 500 个人发同一封邮件,你绝不会手动复制粘贴 500 次——你也不需要。循环(loop)就是那个会说「把这个动作一遍又一遍地做」的工具,于是你只写一次步骤,电脑就替你重复。
循环有两种日常的口味。第一种是每一项重复一次——「列表上的每个名字,都发一封邮件」。第二种是重复到某个条件让它停——「只要收到的密码是错的,就一直要求重新输入」。两者共享同一种心跳节奏:做事、检查要不要再来一次、做事、再检查。
逐项遍历一份列表
大多数时候你之所以要循环,是因为你手上有一堆东西要处理。在代码里,这样一组有顺序的东西叫数组(array)——把它想象成一排带编号的盒子,每个盒子里装着一个值。你最常写的循环,就是从第一个盒子走到最后一个盒子,在每一站做一件小事。
fruits = ["apple", "pear", "plum"]
for fruit in fruits {
print("I have a " + fruit)
}把那行 `for ... in ...` 大声读成「对 fruits 里的每个 fruit」。`fruit` 这个词是一个临时标签,每转一圈就指向其中一项——先是「apple」,然后「pear」,再然后「plum」。你只写一次循环体,循环每一圈都贴心地替你换上下一项。这就是全部的诀窍,而你会不停地用到它。
新手最常踩的坑
有两个错误几乎人人在早期都会撞上,所以现在认出它们,能省下你以后好几个小时。第一个是差一(off-by-one)错误。它通常在你自己数位置、而不用 `for each` 时发作,因为在大多数语言里,数组的第一个盒子编号是 0,不是 1——所以一份 3 项的列表,位置是 0、1、2。去拿位置 3 会什么都拿不到,或者直接崩溃。
第二个坑是死循环(infinite loop):一个永远停不下来的重复,因为你让它等的那个条件永远不会变成真。想象你对朋友说「一直走到你看见红色的门为止」,可根本没有红色的门——他就会永远走下去。在代码里,循环就一直空转,程序卡死,你的风扇开始狂转。
小结
你刚刚认识了两个概念,它们能把一串平铺直叙的指令,变成会思考、会行动的东西。条件负责决定——它问一个「是/否」问题,然后挑一条路。循环负责重复——每项一次,或者直到某个条件叫停。
你最常写的套路,就是把这两者合在一起:遍历一个数组,并在循环内部用一个 `if` 来决定怎么处理每一项。留心「差一」和「死循环」这两个坑,永远先问「是什么让它停?」,你手里就已经握住了相当可观的一大块编程能力。