泡面编程 /第4章
变量
本节我们将了解变量的含义,以及它的使用规则。
你或许看过荒野求生节目,就是让一些富有生存经验的人到荒岛去生活一段时间,通过镜头向电视观众展示整个过程。荒野达人往往会从生火、寻找水源、寻找食物等工作开始,逐步创建出适合人类生存的条件。在这个过程中,他们往往会尝试制作各种容器——采摘一些大的树叶用来盛水,编织一些网兜用来盛放猎物等。可见,容器是人类生活中非常重要的工具。
当我们去博物馆时也可以发现这一点,古代的许多文物都是容器,例如鼎、簋、尊、觥等青铜器,瓶、尊、碗、碟等瓷器,足以看出容器的重要性。图 1就展示了古代的容器——鼎。

现在生活中,当然也一样,时时刻刻需要容器。接下来,我们就以我们泡一包方便面时的操作片段为例,看看都用到那些容器。我们对所有的容器都加上波浪线,以避免我们忽略它。
我们先从方便面袋中将方便面饼取出,并将其放入碗中。打开水龙头,将适量的水注入水壶。将水壶放到燃气灶上,将水烧开。将开水注入放有方便面饼的碗中。
可以看出,碗这一容器在整个过程中发挥了很大的作用。
首先,无论是方便袋还是碗,作为容器它们都能装着面饼,这可以让我们腾出了双手做别的事情。
其次,面饼和热水的混合这一步骤是在碗中发生的。是碗这一容器,让这两种事物混合,然后成为一个整体——热腾腾的泡面。
我们突然聊起容器可不是一时兴起,也不是因为逛完博物馆后的有感而发,而是因为容器在程序中也同样的重要。程序运行时,也需要容器来帮助程序存储内容,也需要容器来帮助完成一些“混合”操作。程序中的容器叫变量,就是说里面的东西可以一直变的意思。
拓展阅读
程序在准备容器时,实际需要知道三个信息:这个容器准备装什么类型的内容、容器要有多大、容器叫什么名字。
生活中,我们使用使用水杯装水、使用碗装饭、使用盘子装菜,只有确定好了要装什么内容,才能确定合适的容器,毕竟我们并不想用酒杯盛米饭。图 2就展示了一个摆满了各种容器的餐桌。程序也一样,需要知道接下来准备的容器是装什么的,是装一串文本字符,还是自然数、小数等等。
图 2:摆满各种容器的餐桌 我们会使用大碟子装大鱼、小碟子装小鱼。如果反过来,用小碟子装大鱼,那可就麻烦了,不仅会让鱼头或者鱼尾搭到桌子上,还会把汤汁洒的到处都是。用大碟子装小鱼倒不会将鱼撒出来,但浪费了碟子中的空间。程序也一样的,如果准备的容器小了,则对应的内容存不进去,准备的容器大了,则会浪费很多空间。
平时生活中,我们很少会给容器起名字,多数时候是用“我的水杯”、“你的酒杯”、“那个碟子”这样的方式来指代,不过当容器足够多时,给每个容器起个名字或许是个不错的选择,你可以尝试下——你的酒杯叫“尽欢杯”,我的酒杯叫“对月杯”。
因此,当我们让程序准备一个变量时,需要说明变量的三要素,例如可以是下面的结构:
内容类型 变量名[存储内容的数目]
有一些编程语言,会通过接下来要装入变量中的内容的类型、长度来自动匹配出类型合适、大小合适的变量。因此,我们在编写程序时,就不需要指定内容类型和存储内容的数目了,只需要给变量起个名字即可。使用这种编程语言时,就不用提前准备变量了,而是直接给出变量名,然后往里装东西即可。
在本章中,我们就采用这种更为简洁的方式来制定语法。
程序中的变量是有名字的,只有这样,当程序中存在许多的变量时,我们才能够准确地找出我们想要的变量。
如果我们要向某个名字的变量中装入内容,那对应的语法是:
变量名 = 内容
这里要注意,“=”可不是数学中的含义,而是将右侧的内容装到左侧的容器的意思。这种操作被称为“赋值”操作,意思是将右侧的内容(被称为值),赋给左边的变量。
于是,
a = 3
的意思是,将3这个值赋给a,于是a里面就装着3了。
可我们怎么取出a里面装着的3呢?
变量名除了在赋值语句左侧时表示容器,其他时候都指代其中存放的内容。所以,以后我们只要提及a,就是指的里面存放的内容3。其实在日常生活中,我们也常这么讲话。
把我的“尽欢杯”倒满酒。 我要把“尽欢杯”一饮而尽! 我的“尽欢杯”可比你的“对月杯”要满啊!
其中第一句是赋值操作(也就是将内容装到容器中的操作),这里出现的“尽欢杯”指的的杯子本身。而后两句的“尽欢杯”都不是指的杯子本身,而是指里面装的酒。
理解了这一点,我们可以做一个思考题了,我们进行下面的操作,最后a中的内容是什么?
a = 3
a = 4
答案是:4。
因为a中先装了3,但是后面又被替换为了4。通过这个示例是想向大家说明,每次赋值都会清空容器,装入右侧提供的内容。
那进行下面的操作,
a = 3
b = a
请问,最后b中的内容是什么?
答案是3。
因为“a = 3”操作后,“a”中装的是“3”。而“b = a”中的“a”指的就是其中的内容“3”,并把“3”赋值给了容器“b”。
到此,你已经掌握了程序中的赋值技巧!
不过,你心中或许还有一个疑问,“=”已经被占用了,可怎么表示相等啊?
答案是,只能勉为其难地使用“==”了。
其实,这还挺合理的。
什么?表示“=”不是“相等”,而“==”却是“相等”的设置挺合理?
是的,因为赋值操作实在太常用了,把较短的“=”让给它,可以让我们在写程序时少敲击很多次的键盘。相比而言,判断是否相等则没那么常用。
判断是否相等的操作就是我们数学中的逻辑判断,它的结果就是:真或者假。
于是:
3 == 3
的结论是:真。
4 == 3
的结论是:假。
好,下面我们要结合起来考察了,请问下面这段程序,最后一行的判断是真是假?
a = 3
a == 4
你或许一眼就知道答案是:假。
因为第二行中,a的出现代表的是其中存放的内容“3”,而“3”显然不等于“4”。
那下面程序的最后一行呢?
a = 3
b = a
b == 3
答案是:真。原因就不需要我多解释了吧。
好了,只要理解了变量,我们就离写出真正的程序不远了。
