如果变量是玻璃杯
2009-03-31陈凯
陈 凯
许多教师喜欢用盛水的玻璃杯来给学生演示两个变量间交换值的过程,一般是取三只杯子,姑且称之为杯子A、杯子B、杯子C,其中杯子A和B盛水,杯子C空着,可通过杯子C的临时存储,实现杯子A和B交换水的过程:杯子A的水倒给杯子C,杯子B的水倒给杯子A,杯子C的水倒给杯子B。不过,假如变量是玻璃杯,情况还真不是那样简单,以Ruby代码为例,借助第三个变量实现变量A和变量B之间值的交换代码是C=A;A=B;B=C。注意其中的第一步,当把变量A中的值赋予C之后,A的值仍然保持原样。而在用玻璃杯交换水的操作过程中,当杯子A中的水倾倒给杯子C后,杯子A就“自动”清零了。
显然,通过杯子交换的是一种物质实体,用变量交换的是信息,两者的不同通过一个简单的换水实验就显现出来了,这恰巧就是信息技术课程基础部分的内容之一。不过再深入一层,假如程序语言中的变量的确就是一些没有刻度且大小一致的玻璃杯,而允许操作者可做的事情只有放水、倒水、在两个杯子间比较水位,那么,这个程序语言系统还能做哪些事情呢?下面描述的就是这样一个假想中的玻璃杯程序语言系统。
● 玻璃杯程序代码
倒水符“<<<”:这是必然要新添加的程序保留字,用来描述将一只杯子里的水全部注入到另一只杯子中的情况,例如C<< 赋值符“=”:用来描述通过水龙头向杯子放水,使之水位与另一只杯子持平,当然,也可通过向水槽倒走多余的水达到同样的目的。假如C杯初始状态是空的,那么C=A就表示,向C注水直至其水位与A持平。通过水龙头放水以及向水槽倒水的方法,就能比较真实地通过玻璃杯模拟两个变量之间交换值的过程了。 减水符“-”:有两只杯子,要从水多的杯子中减去水少的杯子中的水量,但减走的水并不是抛弃到水槽里,而是倒给第三个空杯,则借用符号“-”,但必然在一个联合的过程中使用此符号,如C<<<(A-B)。 ● 代码示范 A中的水增加到B中,但A保持原样:C=A;B<<