《代码大全》三:变量

作用域

    尽可能减小作用域

    把对某一变量的引用集中放置。(研究人员认为把对某一变量的访问放得越近,那么对阅读者精神压力也就越小)

持久性

赋值时间 越是晚给变量赋值,代码的灵活性便越大。

功能单一

使用数据时通常考虑的问题

    一般数据

        是否变量的作用域尽可能的小。

        变量集中使用

        每个变量有且只有一个功能

        每个变量明确好定义

        每个变量都用到了

全局变量

    全局变量在程序中的任何地方都可以进行存取。即使使用全局变量是没有危险的,使用它也绝非最好的编程

方法。

  伴随全局变量的常见问题

    如果不加选择的使用全局变量,或者不使用热门就翻到很不方便,那你可能没有充分意识到信息隐蔽和模块化的好处。

最好尽可能使用子程序和模块。

    对全局数据的疏忽改变。

    全局变量会损害模块性和可管理性。

    全局数据妨碍重新使用新的代码。

怎么样降低全局数据带来的危险

    1)先使所有变量成为局部的,然后再根据需要把其中某一些改为全局。

    2)区分全局和模块。

    3)建立使你一眼即可识别出全局变量的命名约定。(C# 采用微软命名,如 mTestId)

    4) 不要通过庞大的数据放入庞大的变量,同时又到处传递它来掩盖你使用了全局变量的事实。

把什么都放入一个巨大的结构,可能从字面上满足了避免使用全局变量这准则,但这只是表面文章,事实

上这样做,得不到任何真正模块化的好处,如果你使用了全局便利的话,那就分开使用它,不要企图用臃肿

的数据结构来掩盖它。

    5)用存取子程序来代替全局数据

      优点:可以对数据进行集中控制,如果你以后找到了更合适的数据结构,那么不必再每一处涉及到

数据的地方都进行修改,而只修改存取子程序就可以了,修改的影响可以被限制在存取子程序的内部。

       怎样存取子程序:将数据隐含在模块中,编写可以使你访问并修改的子程序,数据所在模块之外的子程序要求存取数据时,

应让它通过存取子程序而不直接存取模块内的数据。比如,假设有一个状态变量你可以通过两个存取子程序GetStatus(),SetStatus()来对

其进行存取操作。

       不要把所有的全局数据都放在一个模块:如果你把所有的全局数据都归成一个大堆,并编写对其存取的子程序,的确可以消除右

全局数据带来的问题,但同时也抛弃了信息隐蔽和抽象数据类型所带来的优点。编写存取子程序之前,应

先考虑一下每一全局数据应属于哪一个模块,然后把这个全局数据,相应的存取子程序和其关联的子程序

放入那个模块。

        把对数据的所有存取保持在同一抽象水平上:如果你用了某一存取子程序对某一数据进行了一项操作,那么

对这一数据的其他操作也应通过存取子程序来实现。比如若是通过存取子程序来从数据结构总读取数值的,那么对该数据结构的

写操作也应通过子程序来实现。

        

    小结:

      使用数据时通常要考虑的一些问题

        I.一般数据

          是否使变量的作用域尽可能的小。

          是否把对变量的使用集中到了一起。

          每个变量是否仅有且只有一个功能。

          每个变量的含义都是明确的嘛,保证每个变量都没有隐含的意义。

          每一个变量都被用到了嘛。

        II.全局变量

          是否在迫不得已的情况下,才使某些变量成为全局的。

          命名约定对全局,模块,局部变量进行了区分。

          是否说明了所有全局变量。(写注释)

          程序中应该不含有伪全局变量(庞大而臃肿的数据结构)

          是否用子程序代替全局数据。

          是否存取子程序和数据组织层模块而不是随意归成一堆的。    

          所有相互有联系的存取子程序,其抽象程度都是一致的。

        尽量减少变量的作用域。

        把对变量的引用集中到一起,应尽量使用变量成为局部或者模块的,避免使用全局变量。

        使每个变量有且仅有一个功能。

        并不是因为全局数据危险才去使用它们,之所以避免用它是因为可以用更好的技术代替它。

        如果全局数据确实不可避免的话,应通过存取子程序来对其进行存取操作。存取子程序不仅具备全局

变量和功能,而且可以提供更多额功能(C# 属性的使用)。

  

        

        

      

        

  

猜你喜欢

转载自www.cnblogs.com/u3ddjw/p/9567135.html