《代码大全》三:变量
Posted u3ddjw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《代码大全》三:变量相关的知识,希望对你有一定的参考价值。
作用域
尽可能减小作用域
把对某一变量的引用集中放置。(研究人员认为把对某一变量的访问放得越近,那么对阅读者精神压力也就越小)
持久性
赋值时间 越是晚给变量赋值,代码的灵活性便越大。
功能单一
使用数据时通常考虑的问题
一般数据
是否变量的作用域尽可能的小。
变量集中使用
每个变量有且只有一个功能
每个变量明确好定义
每个变量都用到了
全局变量
全局变量在程序中的任何地方都可以进行存取。即使使用全局变量是没有危险的,使用它也绝非最好的编程
方法。
伴随全局变量的常见问题
如果不加选择的使用全局变量,或者不使用热门就翻到很不方便,那你可能没有充分意识到信息隐蔽和模块化的好处。
最好尽可能使用子程序和模块。
对全局数据的疏忽改变。
全局变量会损害模块性和可管理性。
全局数据妨碍重新使用新的代码。
怎么样降低全局数据带来的危险
1)先使所有变量成为局部的,然后再根据需要把其中某一些改为全局。
2)区分全局和模块。
3)建立使你一眼即可识别出全局变量的命名约定。(C# 采用微软命名,如 mTestId)
4) 不要通过庞大的数据放入庞大的变量,同时又到处传递它来掩盖你使用了全局变量的事实。
把什么都放入一个巨大的结构,可能从字面上满足了避免使用全局变量这准则,但这只是表面文章,事实
上这样做,得不到任何真正模块化的好处,如果你使用了全局便利的话,那就分开使用它,不要企图用臃肿
的数据结构来掩盖它。
5)用存取子程序来代替全局数据
优点:可以对数据进行集中控制,如果你以后找到了更合适的数据结构,那么不必再每一处涉及到
数据的地方都进行修改,而只修改存取子程序就可以了,修改的影响可以被限制在存取子程序的内部。
怎样存取子程序:将数据隐含在模块中,编写可以使你访问并修改的子程序,数据所在模块之外的子程序要求存取数据时,
应让它通过存取子程序而不直接存取模块内的数据。比如,假设有一个状态变量你可以通过两个存取子程序GetStatus(),SetStatus()来对
其进行存取操作。
不要把所有的全局数据都放在一个模块:如果你把所有的全局数据都归成一个大堆,并编写对其存取的子程序,的确可以消除右
全局数据带来的问题,但同时也抛弃了信息隐蔽和抽象数据类型所带来的优点。编写存取子程序之前,应
先考虑一下每一全局数据应属于哪一个模块,然后把这个全局数据,相应的存取子程序和其关联的子程序
放入那个模块。
把对数据的所有存取保持在同一抽象水平上:如果你用了某一存取子程序对某一数据进行了一项操作,那么
对这一数据的其他操作也应通过存取子程序来实现。比如若是通过存取子程序来从数据结构总读取数值的,那么对该数据结构的
写操作也应通过子程序来实现。
小结:
使用数据时通常要考虑的一些问题
I.一般数据
是否使变量的作用域尽可能的小。
是否把对变量的使用集中到了一起。
每个变量是否仅有且只有一个功能。
每个变量的含义都是明确的嘛,保证每个变量都没有隐含的意义。
每一个变量都被用到了嘛。
II.全局变量
是否在迫不得已的情况下,才使某些变量成为全局的。
命名约定对全局,模块,局部变量进行了区分。
是否说明了所有全局变量。(写注释)
程序中应该不含有伪全局变量(庞大而臃肿的数据结构)
是否用子程序代替全局数据。
是否存取子程序和数据组织层模块而不是随意归成一堆的。
所有相互有联系的存取子程序,其抽象程度都是一致的。
尽量减少变量的作用域。
把对变量的引用集中到一起,应尽量使用变量成为局部或者模块的,避免使用全局变量。
使每个变量有且仅有一个功能。
并不是因为全局数据危险才去使用它们,之所以避免用它是因为可以用更好的技术代替它。
如果全局数据确实不可避免的话,应通过存取子程序来对其进行存取操作。存取子程序不仅具备全局
变量和功能,而且可以提供更多额功能(C# 属性的使用)。
以上是关于《代码大全》三:变量的主要内容,如果未能解决你的问题,请参考以下文章