人脑可以处理的数据包括声音,图像,触感等。人类对数据进行分类的基本目的是有利于组织和加工。相似类型数据的处理方法可以固化(模式化),这样有利于提高数据处理的效率,同时也有利于处理经验的传播。编程语言中的数据类型的是人类这种处理数据的思想或方法在计算机上的具体应用。数据类型的定义包括相似数据的共同特征(属性)和类似的一系列加工方式(方法)。看起来这种认识方法与我们知道的面向对象的特征一致,这并不意外,因为每种数据类型都可以看作是数据对象的类型。
数据类型可以分为基本数据类型和复合数据类型。要明白,这个两个概念是相对的。一般情况下,我们定义复合类型是基本数据类型的一个集合。对于计算机编程语言来说,基本的数据类型都很相似:位,字节,整形,浮点数,字符串,时间。对于真假,不同的语言处理方式则不太相同,这点比较重要,因为如果忽略这一点,就容易产生Bug.对于Java,Delphi,C# 这些语言,都有专门的真假保留字。而对于C,C++,JavaScript等语言来说,则没有专门的保留字。学习具体语言的时候应该弄清楚。当然,这些问题不要问为什么,就当约定就好了。
在这里我觉得有必要提一个数据库中的空值概念。空代表没有输入,是一种原始的状态。对于文本来说,空,空文本是有很大区别的(虽然有些数据库把空串处理成空值),有一些聚合函数会忽略空条件。在数据库中,这类错误很容易犯。具体的大家可以参考目标数据库的处理方式。对于C#编程语言,对于基本数据类型,也提供了一种可空类型,虽然从实际含义上来说这是一种进步,但说实在的,这增加了数据处理的复杂度(要时刻记得判空)。所以一般要求不高的情况下,可以通过拒绝空值来减少处理中的各种空值判断。
在学习数据类型的时候,基本类型因为经常用,只需要先了解基本概念,如何定义,有哪些基本的方法或函数。没必要死记硬背,在实践过程中积累即可。对于数据类型的长度,特别是数字型,应结合目标业务(特别是精度方面)以及计算机的位数来考虑。而对于数据库中的数据类型长度,则应考虑到数据库本身的文件读取特性(比如Oracle数据每次读取数据文件块都是2K(这个可以设置),那么数据记录的总长度就应该控制在2K以内为好。
编程中的流程控制,有顺序,分支和循环三种基本类型。任何其它流程都可以通过这三种基本的流程控制来表达。如果想了解为甚么,可以百度。但一般情况下不需要深究。这也是一种处理学习的一种方法:经过证明的东西可以拿来用,不需求什么事情都要弄明白为什么。
我们工作和学习一般都是流程化的,人生也是这样,但由于时间的单向性,循环只能是在一种类似,不是数学意义上的循环。
数据类型的很多东西,其实都是一种约定或者规范,或者偶然,比如一个字节是8位,这可能和早期的计算机位数(CPU带宽)有关,至于为什么早期CPU只有8位呢.....打住。而且有些东西可能就出自于设计者们的偏好,比如java为什麽叫Java,比如i,j,k表示循环变量等。
识别基本的元素,有的时候是一种非常重要的工作。比如0-9十个数字符号就可以表示任意的自然数(含0)。这和基本数据类型的选取也是相同道理。从数学上讲就是线性代数中的秩和线性表达(相关)的内容。