如何理解变量?
—— 新手编程1001问之C#编程基础
几乎所有的编程语言中都会有变量的概念。
看起来,它并不是一件需要特别的知识铺垫才能正确理解的东西。但是,也许正因为如此,我们总是并没有很好地厘清这个概念的内涵。它和数学中的变量是一个概念吗?
没错!数学中的确有类似变量的概念,比如:方程中的未知数,函数中的自变量等等。但是,它们与编程语言中的变量的概念还是有明显差异的。
比如,方程中的未知数,在方程未解之前,它是未知的,如果我们要猜想它的结果可能会有很多种答案,但是,正解永远只有一个。换句话说,这个未知数终究还是一个确定的值。而编程语言中的变量的值是不确定的。变量的含义侧重于一个变字,变量的值的不确定性,才是变量的本质。它不仅当下不确定,未来也可能不确定。
再比如,函数中的自变量,这是最接近编程语言中的变量的一个数学概念。因为这个自变量的值是变化的,并且它的变化会直接影响到函数的结果。但是,相比编程语言中的变量的概念,自变量是狭义的,它通常只能是数字类型的,也只能在定义域范围内取值。而变量是广义的,不受约束,它几乎可以定义任何对象,除了数字类型,还可以是文本、图像,甚至任何自定义类,其中包括了字段属性和方法。
此外,我们还可以从一个特殊的角度来看看两者的差别。
假设数学中,有一个变量x,它可能会累计递增,在算法上,我们可以将它写进一个递归函数来实现递增,或者干脆增加一个未知数x1,让x1=x+1,然后再x=x1,用这样代换的方法来实现。但是,你不可以写成x=x+1,这就不是数学等式了。
而在编程语言中,x=x+1这样的变量运算几乎随处可见。我们通常将它称之为重新赋值。它是体现变量之变”的精彩呈现。
好了,通过上面的对比,我们对变量,好像有一个更清晰的认识了。那么,我们来看看,编程语言中,是如何定义变量的。
程序语言中,变量的概念是指:程序运行中,用于临时存储数据的对象。
这个概念中有三个要点需要把握:
第一,程序运行中,这是变量存在的场景。换句话说,离开了运行中的程序,变量是不存在的。在物理层面,变量存在于内存中,以内存地址的方式记录。
第二,临时...对象,这也是变量存在的一个重要特征,它并不能持久地存在。与此相对的是数据库,数据库是持久化保存数据的地方。所以,我们会经常看到“数据持久化”这个概念,它就是指将变量中的临时数据保存到数据库的过程。
第三,存储数据,这是变量的使命。我们需要理解的是,不要将此处的数据简单理解为数字,数据绝对不能等同于数字。数据可以是任何对象及对象的集合,它是广义的,几乎可以涵盖对一切信息的描述。
下面,我们以C#语言为例,来介绍一下有关变量的定义和赋值。
形式上,C# 有多种变量,其中包括字段、数组元素、局部变量和参数。
每个变量都具有一种类型,用于确定可以在变量中存储哪些值。
变量的类型有如下七类:
1、不可以为 null 的值类型:具有精确类型的值,如简单的值类型。
2、可以为 null 的值类型:为null值或具有精确类型的值。
3、object:null,引用类型。是对任意引用类型的对象的引用,或者是对任意值类型的装箱值的引用。
4、类:默认为null,引用类型,是对类类型实例的引用,或对派生自类类型的类实例的引用。
5、接口:默认为null,引用类型,是对实现接口类型的类类型实例的引用,或对实现接口类型的值类型的装箱值的引用。
6、数组:默认为null,引用类型,是对数组类型实例的引用,或对兼容的数组类型实例的引用。
7、委托:默认为null,引用类型,是对委托类型实例的引用。
变量的声明:
1、格式:类型 + 变量名
int x;
2、命名习惯:驼峰命名法。
一般简单类型的变量使用小写字母开头,或者全部小写字母,类名和接口名使用标准驼峰命名法。
int x;
string myName;
class MyClassName
请注意:C#对大小写敏感。
变量的赋值:通常有两种方法。
1、先声明,后赋值
int x;
x = 0;
请注意,等号“=”不是一个判断,而是一个动作,表示“将某值赋值给某变量”。
2、边声明边赋值
int x = 0;
请注意,不是所有的C#变量都是这样的简单类型的对象,它可以是一个自定义的类,存储几乎任意复杂的数据。这也是我们面向对象编程需要建立的一个重要认知。
另外,有关变量的运算,我们今天就不讨论了。好了,今天咱们就聊到这儿,希望能对你有帮助。