
变量是计算机编程中的一个重要概念。变量是一个可以存储值的字母或名称。当你编程时,可使用变量来存储数字,例如建筑物的高度,或者存储单词,例如人的名字。简单地说,可使用变量表示程序所需的任何信息。你可能会问:“既然我可以使用信息,为什么要用变量?”因为变量可以随着程序的运行而改变其表示的值。例如,你可以写个程序来跟踪罐子里糖豆的数目。因为糖是要被吃掉的,所以罐里糖豆的数目可能会随着时间的推移而改变。你可以使用一个变量来表示不同时间的糖豆数目,而无需在每次糖豆数目变化时重新修改程序。将信息存储于变量中
使用变量有三个步骤:声明变量 (declare the variable)。告诉程序变量的名称和类型。
给变量赋值 (assign the variable)。赋予变量一个要保存的值。
使用变量 (user the variable)。在程序中获得变量中所存储的值。
声明变量
声明变量时,必须决定其名称和存储其中的数据的类型 (data type) 。使用 Dim 和 As 这两个关键字来声明变量,如下所示。Dim aNumber As Integer
这行代码的意思是要使用一个名为 aNumber 的变量,并且希望它所存储的值的数据类型为整数 (Integer)。因为 aNumber 是一个整数 (Integer) 数据类型,所以它只能存储整数。例如要存储 425这样带有小数的数字,则需使用双精度浮点数 (Double) 数据类型。如果要存储单词或句子,需使用字符串 (String)数据类型。另外一种在此值得一提的数据类型是布尔 (Boolean),它可存储 True 或 False 值。下面是关于如何声明变量的更多示例。Dim aDouble As Double
Dim aName As String
Dim YesOrNo As Boolean
给变量赋值
使用 = 符号给变量赋值,如下例所示。这时候,这个 = 符号我们称之为赋值变量运算符 (assignment operator)。aNumber = 42
这行代码的值为 42,它存储在先前声明的名为 aNumber 的变量中。声明变量并给变量赋个缺省值
你可以用一行代码声明变量,然后用另一行代码给变量赋值。比如:Dim aNumber As Integer
aNumber = 42
但是,如果尝试在赋值前使用变量,可能导致错误。因此,最好在同一行代码中声明变量和并给变量赋值。即使还不知道变量将要存储什么值,也可以给变量赋个缺省值 (default value) 。上面的两行代码就可以写成:Dim aNumber As Integer = 42
更多代码示例:Dim aDouble As Double = 0
Dim aName As String = "default string"
Dim YesOrNo As Boolean = True
通过用同一行代码声明变量并给变量赋个缺省值,可以避免可能发生的错误。以后你仍可以使用赋值方法为变量赋给不同的值。试一试
在本练习中,你要写一个小程序来创建四个变量并为其赋值,然后在一个消息框 (message box) 窗口中显示每个值。首先我们将创建存储代码的项目。创建项目
打开 Visual Studio在文件 (File) 菜单上,单击新建项目 (New Project)。在新建项目 (New Project) 对话框的模板 (Templates) 窗格中,单击 Windows 应用程序 (Windows Application)。在名称 (Name) 框中键入 Variables,再单击确定 (OK)。Visual Basic 将为程序创建文件并打开窗体设计器 (Form Designer)。下一步,我们将创建变量。创建变量并显示它们的值
双击该窗体。代码编辑器 (Code Editor) 打开并显示名为 Form1_Load 的代码节。这节代码,称为过程 (Procedure),包含在窗体首次加载到内存中时执行的指令。在 Form1_Load 过程中,键入以下代码。Dim anInteger As Integer = 42
Dim aDouble As Double = 39345677653
Dim aString As String = "I like woyouxian"
Dim aBoolean As Boolean = True
此代码声明四个变量:Integer、Double、String 和 Boolean,并给它们赋默认值。 提示键入代码时,您可能会注意到:在键入 As 后,光标下会出现一个单词列表。此功能称为智能感应 (Intellisense)。利用这一功能,您只需键入一个单词的前几个字母,便可以在列表中选择相应的单词。完成选择后,就可以按 Tab 键完成单词。注意每当在程序中表示实际文本时,必须用双引号 "" 将文本括起来。这会告诉程序将文本解释为实际文本而不是变量名。如果在实际文本中还包含双引号,你则用两个双引号代替。比如Dim aString As String = "I like ""b l a b l a""!"
给 Boolean 变量赋 True 或 False 值时,则无需用双引号将其括起来,因为 True 和 False 是 Visual Basic 关键字,其本身有特殊的含义。 然后在上一步写的代码下键入以下代码。MsgBox(anInteger)
MsgBox(aDouble)
MsgBox(aString)
MsgBox(aBoolean)
End
前四行代码使用 MsgBox 函数告诉程序在新窗口中显示上一步给每个变量所赋的值。最后一行使用 End 语句告诉程序在执行完此过程后结束。运行程序
选择调试 (Debug) 菜单中的开始调试 (Start Debugging) 运行程序。或者直接按快捷键 F5 运行程序。在出现的每个窗口上单击确定 (OK)。注意每个变量的值依次显示,然后程序结束。程序结束后,你可以返回并更改代码中给变量所赋的值,然后再次运行应用程序,你会看到显示的新值。
在程序中输入一个不存在的变量换行时,IDE会提示该变量不存在,并要求建立该变量,这时你在d出的窗口中可以选择该变量为局部、程序集、或是全局属性
,或者在当前程序集
编辑中拉到最顶端,直接把光标移到
,直接输入你要建的变量名及类型就行。
简言之,根据语意来选择词汇,别无它法……然而,有时我们会不知用什么词汇更合适。
当你想到某个抽象的东西,你更倾向于最先想到的词语,除非你故意不这样,这些词也会抢着出现,直到模糊或改变你的想法。
当你想到一个具体的对象,你觉得词穷,然后你想描述的已经看到了,然后你继续寻找更适合它的词。
哈哈,命名竟成了编程中最难的事~
Martin Fowler曾经在一篇文章中曾经引用过Phil Karlton的话:
There are only two hard things in Computer Science: cache invalidation
and naming things
他说这句话在很长的一段时间内都是他最喜欢的话。可见命名对于广大的程序员来说的确是个大问题。
对于我们中国人来说,问题可能出在两个方面:
– 自打学编程开始就没被教育过要重视命名。
这可以在谭浩强的《C语言入门》一书中可见一斑。《C语言入门》可以说是很多程序员在大学时学习的第一门编程语言使用的教材。而本书通篇都是各种
a,b,c,x,y,z 的命名方式。这种poor naming的方式被广大程序员纷纷效仿,导致如今在很多项目代码中随处可见。
– 命名需要一定的英文功底,而国内程序员的英文水平参差不齐。
很多程序员被教育后开始逐渐重视命名,但是受限于英文水平,不知道使用什么合适的英文词汇来命名。有的甚至直接把中文直译为英文的方式命名,或者直接用拼音来命名,反而得不偿失。
命名的重要性我想不需要过于强调。如今的软件开发早已不是求伯君那种单q匹马的时代。你写下的每一行代码都会在不久的以后被团队的其他人甚至你自己多次查看。如果是个开源项目,那么更会被全球各地的人查看源代码。所以代码的可读性就变得尤为重要。如果读者能够轻松读出你的代码的意图,那么就说明你的命名功底相当扎实。
比如在一个管理系统中,你使用这样的代码: a = b c
很容易让人摸不着头脑,虽然程序能够正常运作,但恐怕没人敢轻易修改这行他们不了解的代码。而如果修改成为这样: weeklypay =
hours_worked pay_rate; 那恐怕极少有人不懂这行代码的意图。
糟糕的命名也会导致大量无谓的注释,这是一个很容易跳进去的陷阱。下一段代码怕别人不明白你的意图,那么就加上注释。这貌似是一个很精妙的想法,实际上却南辕北辙。比如以下的注释:
int d; // elapsed time in days
貌似很容易让人读懂,但是问题还是很多。首先注释不能跟着所有的引用,在定义处了解了d的含义,继续往下看的话却很容易忘记;其次代码更新了,很可能会忘记修改注释,反而给把读者带入歧途。
与其用这样的注释,还不如直接重命名: int elapsedTimeInDays; 这样清晰易懂,还不用维护注释,何乐而不为?
那么如何着手来提高的自己的命名技巧那?
首先寻找一份公认的代码规范,并严格按照这样的标准执行。比如google开源了自己内部使用的语言编码规范,我们可以直接拿来使用。比如请看Google
Java的style guide,相当详实。除此之外还有C++等。这里收集了Google对各种语言的编码规范,非常具有参考价值。
标准的代码规范中的每一条都是有胜出的理由,值得我们遵从。但某些命名问题不一定只有一种最好的解决方式,这就需要团队自己建立起约定。比如对于Java单元测试类的命名方式,不同的团队可能不一样。比如有的团队喜欢以should开头,有的喜欢test开头,有的喜欢骆驼命名法,有些喜欢下划线命名法,每种方式有各自的利弊,没有一种能完全脱颖而出,所以需要团队自行制定。一旦确定使用某一种,那么一定要保持一致。
某些命名规范其实是可以进行自动化检查的,比如在Java应用的构建过程中可以引用checkStyle这款插件,对命名进行一些基本的检查,比如方法名、变量名是否遵循了一定模式等。这样在一定程度上可以强制大家遵守某些约定。自己以前曾经写过一篇文章,请参见这里。
最后要在团队中建立起code review的机制,通过code
review来相互监督纠正命名问题,并且这样更容易达成一致的命名约定,方便协作开发。code
review可以采取非正式会议评审的方式。最简单的方式就是每天找个固定时间大家一起聚在一个显示器前review每个人的代码,现场提出问题,当事人记录下来会后更改。这种方式非常高效。另外有的团队在嵌入代码时可能会引入一些代码评审机制,比如pull
request, cherry pick等。这种review方式比较重量级,反馈周期也较长,好处是可以保证最终迁入的代码是没有问题的。
很多语言和框架为了更加可读,都把命名玩出花来了。比如JavaScript生态圈中重要的单元测试工具Jasmine把测试函数以it命名,这样可以与参数连接起来成为一种表意的自然语言:
如何优雅地为程序中的变量和函数命名?
- 不同的代码段采用不同的命名长度。通常来说,循环计数器(loop
counters)采用1位的单字符来命名,循环判断变量(condition/loop
variables)采用1个单词来命名,方法采用1-2个单词命名,类采用2-3个单词命名,全局变量采用3-4个单词命名。
- 对变量采用具体的命名(specific names)方式,”value”, “equals”,
“data”在任何情况下都不是一种有效的命名方式。
- 采用有意义的命名(meaningful names)。变量的名字必须准确反映它的含义和内容。
- 不要用 o_, obj_, m_ 等前缀命名。变量不需要前缀标签来表示自己是一个变量。
- 遵循公司的变量命名规则,在项目中坚持使用同一种变量命名方式。例如txtUserName, lblUserName,
cmbSchoolType等,否则会对可读性造成影响,而且会令查找/替换工具(find/replace tools)不可用。
- 遵循当前语言的变量命名规则,不要不统一(inconsistently)地使用大/小写字母。例如:userName, UserName,
USER_NAME, m_userName, username, …。
以Java为例:
类名使用驼峰命名法(Camel Case):VelocityResponseWriter
包名使用小写:comcompanyprojectui
变量使用首字母小写的驼峰命名法(Mixed Case):studentName
常量使用大写:MAX_PARAMETER_COUNT = 100
枚举类(enum class)采用驼峰命名法,枚举值(enum values)采用大写。
除了常量和枚举值以外,不要使用下划线’_’
- 在同一个类不同的场景(contexts)中不要复用变量名。例如在方法、初始化方法和类中。这样做可以提高可读性和可维护性。
- 不要对不同使用目的的变量使用同一个变量名,而是赋予它们不同的名字。这同样对保持可读性和可维护性很重要。
- 变量名不要使用非ASCII字符(non-ASCII chars)。这样做可能会在跨平台使用时产生问题。
-
不要使用过长的变量名(例如50个字符)。过长的变量名会导致代码丑陋(ugly)和难以阅读(hard-to-read),还可能因为字符限制在某些编译器上存在兼容性问题。
- 仅使用一种自然语言(natural language)来命名变量。例如,同时使用德语和英语来命名变量会导致(理解)不一致和降低可读性。
- 使用有意义的方法名。方法名必须准确表达该方法的行为,在多数情况下以动词(verb)开头。(例如:createPasswordHash)
- 遵循公司的方法命名规则,在项目中坚持使用同一种方法命名方式。例如 getTxtUserName(), getLblUserName(),
isStudentApproved(),否则会对可读性造成影响,而且会令查找/替换工具不可用。
- 遵循当前语言的变量命名规则,不要不统一地使用大/小写字母。例如:getUserName, GetUserName, getusername,
…。
以Java为例:
方法使用首字母小写的驼峰命名法:getStudentSchoolType
方法参数使用首字母小写的驼峰命名法:setSchoolName(String schoolName)
- 使用有意义的方法参数命名,这样做可以在没有文档的情况下尽量做到“自解释(documentate itself)”
总之,命名问题只是整个编码规范中的一小部分,但是起的作用举足轻重,它是判断一个程序员是否专业的必要标准。
C语言变量的定义是这样的
变量类型 变量名
int a;定义整型变量a
float b;定义单精度变量b
char c[10];定义一个10个字符数组c
另外在定义的时候也可以同时进行初始化例如
int d = 10;//定义一个整型变量d ,并且赋值为10
C Primer Plus P34: 有些数据可以在程序使用之前预先设定并在整个运行过程中没有变化,这称常量。另外的数据在程序运行中可能变化或被赋值,这称为变量。
以上就是关于计算机编程中变量都有哪几种啊全部的内容,包括:计算机编程中变量都有哪几种啊、易语言中怎样定义程序集变量、如何优雅地为程序中的变量和函数命名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)