导语: 本系列讲述了编程语言当中,有关于代码复用所设计的一些机制和概念,包括变量、函数、类、库和包的概念和作用,属个人见解,欢迎指正。
本文不谈及某个具体的编程语言,旨将其中一些共通的概念进行讲解,以便给于像我这种半路出家的人一种思考的维度。
入正题。
变量
首先我们来谈一谈谈变量,在各种编程语言当中,变量是一种最基础的概念,变量的作用是什么呢?
看个例子
例1:
a=3.1415926*2*r
b=3.1415926*r*r
c=3.1415926*4/3*r*r*r
a,b,c三个公式中,都包含了3.1415926,这么长的数,输入一次的打字时长就得几秒,如果我用π代替,而把π的值定位3.1415926,是不是就可以提高操作的效率了呢?
例2:
π=3.1415926
a=π*2*r 等价于a=3.1415926 *2*r
b=π*r*r 等价于b=3.1415926 *r*r
c=π*4/3*r*r*r 等价于c=3.1415926 *4/3*r*r*r
输入操作的代价,比之前的少了许多,有人会说,这不也就少了十几个字符嘛,我也可以复制粘贴,操作的代价都差不多。
试想下,如果不只这几个公式,有几十个,上百个公式需要用到π,那会少掉多少字符?你复制粘贴之后,遇到长一点的公式,一个公式用到好几个π的时候,你的公式得多长,越长是不是看着越乱么?
以上,就是讲解的变量的第一个作用:数据的复用,通过变量,把数据复用到使用变量的地方,使用一次变量也就是使用了一次数据(变量所指向的数据)。
某天因为工作需要,π的值需要改成3.14,那在例1当中我需要手动修改三处;在例2中,我只需要修改一处π的值。
例1:
a=3.1415926*2*r ->a=3.14*2*r
b=3.1415926*r*r ->b=3.14*r*r
c=3.1415926*4/3*r*r*r ->c=3.14*4/3*r*r*r
例2:
π=3.1415926 修改:π=3.14
a=π*2*r ->等价于a=3.14*2*r
b=π*r*r ->等价于b=3.14*r*r
c=π*4/3*r*r*r ->等价于c=3.14*4/3*r*r*r
这个就引出的变量的第二个作用:数据的自动更新,当变量指代的数据变动了,之后使用到变量的地方,自动更改为最新的数据值。
这时,有人还会说,变量的这两个作用,常量也可以做到,变量跟常量不就没啥区别了么?那接下来,就要说到变量的第三个作用,也就是变量和常量不一样的地方。
我们需要用到常量的地方,不希望常量的值发生变动,定义了常量之后,在代码运行的过程中常量的值不发生改变。而上边的例子,我们手动修改变量的值,是在变量定义的时候进行了修改,在定义常量的代码中,也是可以修改常量的值,但只限于定义的时候。
但,变量之所以为变量,说的是,在代码运行的过程当中,可以通过代码来修改变量的值,也就是变量的第三个作用:通过代码修改数据,或者说重新赋值。
例3:
π=3.14
r=0.5
a=π*2*r
b=π*r*r
c=π*4/3*r*r*r
if(r<1) π=3.1415926
d=π*r*r*r*r
e=π*r*r*r*r*r
在代码执行过程中,通过条件判断如果r<1,则π重新赋值为3.1415926,而不管π之前的值等于什么。这个过程中,我们并不是手动修改π在定义时的值,而是通过代码来给π重新赋值。就是说,π这个变量,在定义之后,是可以根据需要进行数据的修改,重新赋值,这也是变量有别于常量的地方。
小结:
变量的三个作用:数据替代,数据更新,数据修改。
涉及到的复用机制:数据的复用,更深入一点说,是内存中某个存放数据的空间的复用,在定义常量和变量时,内存中都会指定某个地址的空间来存放数据,相较于常量,变量在代码运行的过程当中是可以改变所存放的数据,变量实则代表着内存的这个地址空间,不管里边的数据如何变化,当用到变量时,就从空间中取出当下存放的数据,而不管程序运行到哪个时间点,空间还是那个空间,数据就不一定还是那个数据,这也是变量之所以为变量的原因,而常量从头到尾都守着那个空间和那个数据,始终如一。