变数
发表于:2007-07-14来源:作者:点击数:
标签:
变数的基本概念 在撰写程序的时候,常需要暂时把一些数据存放在一个地方,然后等适当的时机再作处理;这时 就需要一个可供我们快速存取数据的地方,这个地方就是计算机的内存。变量可以被用来: ? 作为暂时存对象属性值的地方 ? 作为一个计算某个程序或是程
变数的基本概念
在撰写程序的时候,常需要暂时把一些数据存放在一个地方,然后等适当的时机再作处理;这时
就需要一个可供我们快速存取数据的地方,这个地方就是计算机的内存。变量可以被用来:
? 作为暂时存对象属性值的地方
? 作为一个计算某个程序或是程序代码区块执行次数的记数器
? 作为保留从函式(Function)所传回的值
? 作为存放数据夹名称或是文件名称的地方
当我们使用变量的时候,内存会保留一个空间供程序使用。我们不可能直接以指定内存地址的方式来存取内存内的数据,因为直接去存取内存有相当程度的风险,存取不当甚至会导致数据的损坏或系统当机,所以必需请求操作系统分配记忆空间给我们使用,不过这种低阶的工作交给C
LR(Common Language Runtime)处理即可;因为程序在执行的时候,内存管理是由CLR 来负责的。这时候我们就可以撰写程序请CLR 向操作系统要求一个内存空间,至于内存会保留多大的空间,则视我们的需要而定。这个向CLR 提出内存
需求的动作,我们称为变量的宣告。变量的宣告包括了两个部分:变量名称以及数据型态。变量名称是我们利用有意义的代码来取代十六进制的内存地址,让程序
开发人员容易使用及管理变量。数据型态是我们要存取的数据型态,因为系统的内存容量是有限制的,所以我们要宣告适当大小的变量以避免浪费内存空间;变量被分配到的内存容量大小,就是由数据型态来决定。
变量的数据型态
VB.NET 的变量可以储存文字、数值以及对象等型态的数据。为了要让执行更有效率,VB.NET提供了几种可以储存特定数据的变量型态,如下表所示:
选择变量的数据型态
要使用变量最好先明确的宣告变量名称及数据型态。宣告正确的变量型态不但可以让你的程序更有效率,并且可以减少内存使用的空间。举例来说,VB.NET 处理整数(Integer 或Short)型别的数据会比处理浮点数(Single 或是Double)型别的数据来的快;而处理精简整数(Short)又比处理整数(Integer)来的快,所以最好使用精简整数来储存100 这个数值。除了内存以及执行效率的考量外,另外我们所要考虑的是数值的精确性。选择Decimal 型态的变量比使用浮点数来的精确,而Double 比Single 来的精确。另外还要考量变量溢位(Overflow)的问题,变量可储存的数据被其储存范围所限制。例如精简整数(Short)型态的变量可以接受的数据范围为-32,768 到32,767,如果超出这个范围则会发生溢位错误。
为变数命名
当我们决定要使用变量的时候,为变量取一个名称是非常重要的。变量的命名不但要考虑容易理解,而且还要考虑变量名称的一惯性,尤其是当你或别人日后可能会再阅读或维护程序的时候。
命名法则
变量的命名和其它对象一样被下列的命名法则所限制,为变量取一个清楚且有意义的名称在大型
的项目中特别重要。
命名法则:
? 必需以英文字母为开头。
? 其中不可包含空格,但可包含数字。
? 必需再同一范围内是独一无二的。
? 不可以包含标点或型态宣告字符,但可以包含底线。
? 不可以和VB.NET 的保留字,或系统对象名称一样。
命名习惯
对变量的命名我们有一个习惯,那就是将该变量数据型态的缩写放在变量名称前面,这样可以让
程序代码易于阅读及维护。
宣告变量
宣告变量的语法如下:
我们在VB.NET 中以Dim 关键词来宣告变量,并且在AS 关键词后面指定所要使用的变量型态。「AS 数据型态」用中括号刮起来,表示这个选项是非必要性的,也就是不给也可以。我们在宣告变量的时候可以不指定变量型态, 倘若不指定变量的型态,
VB.NET 则预设变量是Object型态的变量,例如:
以上宣告一个名为strUserName 的字符串型态变量。
以上宣告一个名为shtAge 的精简数值型态变量。
以上宣告一个名为objPen 的对象型态变量。
以上宣告了一个名为objPen 的对象变量。由于使用者没有指定变量的型态,所以VB.NET 就以预设的对象型态作为变量的型态。
当我们以Dim 关键词宣告变量时,VB.NET 就会帮我们把变量准备好,并将该变量依该变量的型态填入初始值。如果变量型态为数值,VB.NET 就会填入0 作为初始值;如果变量型态为字符串,VB.NET 就会为我们填入空字符串「""」;如果变量型态为对象,VB.NET 就会为我们填入空值(Null)。空值不是零也不是空字符串,而是里面要储存的数据还不知道。
变数的初值化
我们在宣告变量的时候也可以指定一个值作为初始值:
以上宣告一个名为strUserName 的字符串型态变量,初始值为Charles。
以上宣告一个名为shtAge 的精简数值型态变量,初始值为30。
为了使用方便,VB.NET 除了支持初始值的设定外,还可用以让我们在同一行中宣告多个变量:
以上宣告了三个变量shtAge、shtHeight 与shtWeight,其数据型态都是精简整数。
以上分别宣告了精简整数型态的变量shtAge 及字符串型态的变量strAddress。
型态宣告字符
VB.NET 为了让我们使用方便,可以利用型态宣告字符来宣告变量,例如:
以上两个宣告都是宣告为整数型态的变量,这样一来程序的写作就轻松多了。并不是每种数据型态都有型态宣告字符,以下为支持型态宣告字符的数据型态:
使用型态宣告字符有一个要注意的地方,那就是
同一个宣告的叙述中一般宣告法不可以和型态
宣告字符混合使用。如下面的范例就是
错误的:
另外VB.NET 的变量不分大小写,所以intIncome 和intincome 是一样的。不过为了容易阅读,我们会将型态简写后的第一个字母大写,例如shtAge。变量名称若由两个以上的字所组成,例如纪录使用者名称的字符串型态变量,习惯上我们会取名为strUserName 或是strUser_Name,这样一来就容易阅读多了。接下来我们来做一个简单的例子,以下的程序代码为计算身高173公分的男生体重:
首先我们先宣告了两个精简整数型态的变量,分别为shtHeight 及shtWeight。先将数值173 存
入变量shtHeight 中,然后利用公式将男生的标准体重算出。男生的标准体重公式为:(身高- 80)×0.7=标准体重,由于身高-80 这个叙述要先执行,所以我们用小括号括起来,VB.NET会优先处理小括号内的叙述,所以执行的结果显示65。
运算子的优先级
如果没有上述算式小括号的话,计算出来的结果是117 而不是正确的65。这是因为这些我们称
为算数运算子的+-×÷ 等符号有优先级,如下表所示:
VB.NET 对于优先级高的先执行运算,若优先级一样,则先执行左边的运算。不过要记忆这些运算子的顺序似乎不是很容易,所以我们可以使用小括号来强制指定运算叙述的优先级。VB.NET遇到小括号先执行运算,倘若小括号中还有小括号,则最内层的小括号先执行运算。例如(10×(3 +9))/(8-2) 这个式子,其运算顺序为3+9 先执行,得到12 后再乘以10,得到120 后再除
以8 减2 的结果6,最后就得到正确的答案20。
VB.Net 新增的运算子
VB.NET 支持下列的运算子:
这些运算子可以简化我们程序的输入。
常数
我们知道变量是用来暂时存放资料的地方,里面的数据随时可以改变。而常数是以有意义的名称代替特定的值,并且不允许改变常数内的数据。倘若使用者在宣告常数后要将常数以新值代替,此时会发生错误。假设我们在程序中使用圆周率3.14159 来计算圆周长以及面积,如下范例所示:
如果我们的程序中有如上面程序中常常使用的数值3.14159 时,我们就可以考虑用常数了。常常输入一长串的数值可能会发生错误,此时我们就可以利用常数。常数可以帮助我们的程序容易阅读,而且不容易发生输入的错误。下列是常数的宣告语法:
要使用常数必需以Const 关键词宣告常数,并且可以指定常数的数据型态以及指定的值为何,例如:
以上宣告了单精浮点数型态的常数cnPI,其值为圆周率3.14159。其中数据型态的指定可以省
略,例如:
所以可以将刚才的程序代码改成:
宣告了常数后,编译器在编译程序时会将常数以常数所代表的值代入常数中,并不影响程序执行的效率。
数组
数组是一种可以记录许多数据的一种特殊变量结构,这个结构里面是由相同数据型态的元素所组合而成。当我们想要将一些数据型态相同的数据,利用一个变量来管理的时候,数组是一个非常方便的变量结构。数组的宣告语法如下:
数组的宣告语法和宣告一般变量差不多,一样都使用基本的数据型态(如Short、Integer、String、Single 及Object 等),只不过要在数组名后面加上小括号,并指定数组所要使用元素数量即可。假如我们想要纪录六个人的年龄,若没有使用数组的话就要宣告六个变量,不但不好管理而且容易出错。如果以数组来管理这些信息,程序代码将变的比较精简也比较好管理。我们来观察下面
的叙述:
上面的叙述宣告了一个名为shtAge 的精简整数型态数组,这个数组可以记录六个元素。宣告完毕后VB.NET 会将数组先在内存里准备好,如下图所示:
这个数组宣告后在内存中被产生,六个元素分别都填入了初始值0,并且将每个元素分配了一个索引值(index)。数组的索引值一律从0 开始,若要存取指定元素中的数据,则要利用这个索引值;如下范例所示:
上述程序代码片段将元素0 到5 的内容分别填入20 到25,所以数组内的值就变成下列插图的状况:
如果想在宣告的时候顺便指定数组内元素的初始值,可以使用下列语法:
这里就不需要指定小括号里面的元素数量,所以之前所指定的元素值在宣告的时候即可用下列方式指定:
VB.NET 数组元素的数量最多可以宣告为264-1 个元素(即是Long 型态的范围)。数组虽然方便,可是它是需要付出代价的,这个代价就是越大的数组越占内存空间。由于刚才宣告的shtAge数组可储存6 个精简整数型态的数据,所占的内存空间为6×2Bytes=12Bytes。故对于数组,使用多少就宣告多少。
多维数组
想要在数组里面记载相关的数据,可以用多维数组。例如刚刚的一维数组记录了六个人的年龄,倘若要多纪录身高,则可以用下列方式宣告一个二维数组:
上面叙述宣告了一个名为shtStudent 精简整数型态的二维数组,这个数组为6×2 的数组,可以记录12 个元素。此时VB 会将数组先在内存里准备好,如下图所示:
我们可以将这个二维数组的第一维想象成X 坐标,第二维想象成Y 坐标。倘若执行下列叙述:
则shtStudent 这个二维数组的内容变成:
如果有需要,我们甚至可以宣告三维数组、四维数组等,VB.NET 最高支持64 维的数组。不过数组的维度越多就越复杂,也就越不容易管理及维护;所以适当的选择数组的元素数目以及维度可以提升程序写作的效率。当你一开始无法精确的确定数组大小时,在宣告数组的时候空出元素的数目即可;如下叙述所示:
然后再程序代码中利用ReDim 叙述来重新分配分配元素实际的数量:
ReDim 叙述也可以用来重新配置数组的大小。假设数组原来在宣告的时候为6 个元素,如有需要可以利用ReDim 叙述将数组重新扩张或缩小,但数组内的所有数据会消失变回初始值。若希望在改变数组大小的时候可以保留元素的内容,可以在ReDim 后面加上Preserve 关键词。例如:
以上范例是将shtStudent 这个数组扩张1 个元素,并保留其值。当然,针对多维数组也可改变其元素的数目,
但是数组的维度不可被改变,而且只有最后一维的元素数量可以被改变,若是你改变了数组的维度或是其它维的元素数目,则会导致错误!
对象型态的数组
数组里面的数据型态,必需要和我们在宣告数组时所指定的数据型态一样。不过如果这个数组的数据型态为对象(Object)型态,则这个数组可以记载各种不的的数据型态,因为对象型态本来就可以容纳各种型态的数据,例如:
这个范例宣告了一个名为objStudent 并可纪录4 个元素的对象型态数组,分别以姓名、住址、年龄以及生日填入数组中。请注意,VB.Net 对于日期型态的数据规定必须使用「#」号括起来。所以这个数组我们我们总共使用了三种数据型态,分别为字符串、数值以及日期。如果我们要将刚刚只能记一个数据的objStudent 数组改成可以记录6 个人,那么我们可以改成以下的二维数组:
所以要填入第一个学生的资料则变为:
而要填入第二个学生的资料则变为:
其它学生的资料依此类推
数据的输入
本章前面已经介绍过将数据输出至浏览器的Response 对象,接下来我们来看看如何取得使用者
所输入的数据。欲取得使用者输入的数据,可以利用Request 对象。Request 对象的语法如下:
由于Request 对象会传回使用者输入的数据,所以必需要使用变量来接收。我们来看看下面这
个例子:
客户端要传送数据给网页
服务器,只要在网址后面加上问号,并将数据名称以及指定的值填入即
可,这个输入的数据我们称为「参数」;如下叙述所示:
以上输入的参数名称为MyName,参数内容为Charles(注意,参数内容虽然是字符串,但是不
用加双引号)。
我们利用浏览器向IIS 要求执行EX03.aspx 这个网页的数据时,MyName 这个参数名称会和参
数内容Charles 一并传送过去。我们来了解参数上传的实际情形:
使用者在要求浏览EX03.aspx 这个网页时,会一并将参数传递至网站伺服端。此时伺服端将此
参数先暂时存放于暂存区中,等aspx 程序透过Request 对象将指定的参数从暂存区取回。我们
也可以一次传递多个参数,例如下列范例码接受两个参数:
在呼叫这个网页时只要以「&」符号来连结第二个参数即可,如下所示:
另外我们来看下列这段程序叙述:
这里的「&」这个连结运算子作为连结字符串用,所以在一行叙述中可以输出这一串文字。
设定IIS 的编码及译码语系
刚刚的aspx 网页我们在输入参数值的时候都是输入英文,如果我们将参数值输入中文:
结果却变成如下的乱码:
这是因为我们要设定IIS 服务器对于数据编码的语系,这个设定档为config.web。我们利用
WordPad 来撰写这个档案,其内容如下:
设定档的内容有分大小写,在编辑时要特别注意。编辑好之后,再将这个档案以纯文字文件的方式储存于c:\Inetpub\wwwroot 这个路径中,则在这个路径之下的数据夹都会受影响;这样一来我们的aspx 网页就可以输入及输出中文了。
原文转自:http://www.ltesting.net