变量是什么?
在现实世界里,有着变量和常量的概念。顾名思义,变量和常量都是量。量是人们对现实世界中事物随时间演变中的不同状态和事物之间相互作用关系的一种描述。这些事物状态和作用关系独立存在,可以称为规律,不以人的意志为转移,当他们落入人的眼中,人便用量来描述它。简而言之,通过对现实世界的观察和分析,人构建了一个精神世界,这个精神世界尽可能的反映现实世界,是现实世界的投影,精神世界中的量和现实世界中的规律相对应。人的一生都在观察现实世界,用自己的精神世界和其他人的精神世界沟通来完善自己的世界,这是一个追求真理,追求“道”的过程。在一段时间内事物状态和事物之间作用关系变化剧烈,人用变量来描述,没有变化,用常量来描述。运动(变化)是永恒的,是绝对的,静止(不变)是相对的,静止是运动的一种特殊状态。所以,变量是绝对的,常量是相对的,常量是一种特殊的变量。
上面是人的精神世界和现实世界之间的关系,说了这么多,它和程序设计语言有什么关系?
程序设计语言的目的是为了更好地写程序,人写程序的过程就是前面提到的追求“道”的过程的一种表现形式,是一部分认识现实世界、改造现实世界的过程,这部分人我们成为程序设计师。这和我们通常意义上改造世界的方法不太一样,它利用人类的智慧,搭建了另一个虚拟世界,成为程序世界。至此,存在三个世界,现实世界、人类精神世界、程序世界。程序世界由人类创造,是人类智慧的延申,是人类改造世界的工具,它被设计用来对现实世界建模分析,使人类智慧摆脱肉体的桎梏,肉体会腐朽,但精神永长存。
人的精神世界是现实世界的投影,程序世界是人的精神世界的投影。程序世界又反过来改造现实世界,进而改造人的精神世界,改造程序世界,循环往复。借助于程序世界,人的精神世界可以更好、更快地摹刻现实世界,可以在风华正茂的年纪挥洒智慧,推动文明进步。
现实世界中的事物要想投影道程序世界,需要经过两层转换,要先转到人的精神世界,再转换到程序世界。在转换过程中,就可能出现错误,如由于对现实世界的观察和分析不足,人的精神世界中存在的量无法真实反映现实世界中的规律,这样的错误传递到程序世界里,程序也无法模拟现实世界中的规律,对现实世界的改造也自然发生错误,脱离了人的控制,这种错误我们一般成为逻辑错误,要从人的身上找原因。另外一种错误叫做语法错误,是由于程序设计语言有缺陷或者程序设计师对语言的语法理解能力不足,无法将自己的精神世界投影到程序世界。在生活中,我们常常听人抱怨说自己不适合编程,如果是上面所说的第二种情况,那没什么大不了的,离开程序设计,在其他领域也能有大作为,如果是第一种,情况怕是有点糟糕了。
现实世界是物质的世界,现实世界中的规律是有载体的,而人的精神世界是没有载体的(超脱于大脑,可能是有载体的,但我现在更倾向于没有,想象力是无穷的),程序世界又是有载体的,依托于计算机硬件,不可能像人类超脱大脑一样超脱于计算机硬件。这里有一个假设,如果程序世界真的超脱了计算机硬件,他们就能够越过人类精神世界,从而直接观察分析现实世界,他们就成为一个全新的族群,和现在的人类一样。
人类精神世界里的量对应现实世界里的事物状态和相互作用关系,精神世界无形无相,基本上可以不同考虑这个状态存储在哪里(就是想考虑也考虑不出来)。从信息的角度上看,现实世界中的规律就是信息,无形无相,投影到人的精神世界就有形无相,载体就是人大脑中的电信号,再投影到程序世界,就只剩下电信号了,这些信号又作用在现实世界中,被人类转换成可以理解的数据并从中提取信息。
程序世界里的量和人的精神世界里的量不同。程序世界里的量指的是一块存储空间,这里面保存了精神世界里的量对应的数据(或信号)。一个存储空间里的值会随着时间变化,它就是变量,不随着时间变化,它就是常量。常量是变量的一种,为了方便程序设计师使用,这块空间有一个名字,叫变量名。这块存储空间一定存储了一个有意义的数据(在人类看来),这个数据叫做变量值。这块空间在整个存储空间有一个唯一的位置,叫做变量地址。这个存储空间保存的值没有意义的时候(不能反映人的精神世界,没有利用价值),存储空间就会被回收,这个过程叫做变量的生存周期。这个变量在什么条件是反映人的精神世界的,什么条件下是无法反映人的精神世界的,这叫做作用域,这个变量还有其他的使用场景,叫做变量属性,生存周期和作用域是变量属性的一种。
综上所述,在程序世界里,变量是一块空间,和值没有半点关系。这块空间没有意义,有意义的是它其中存储的值,所以很自然地,我们使用变量名来指代变量存储的值,但变量不是变量值
。