1. 程式人生 > >《代碼大全》三:變量

《代碼大全》三:變量

重新 滿足 熱門 數值 tid 的確 子程序 設有 含義

作用域

    盡可能減小作用域

    把對某一變量的引用集中放置。(研究人員認為把對某一變量的訪問放得越近,那麽對閱讀者精神壓力也就越小)

持久性

賦值時間 越是晚給變量賦值,代碼的靈活性便越大。

功能單一

使用數據時通常考慮的問題

    一般數據

        是否變量的作用域盡可能的小。

        變量集中使用

        每個變量有且只有一個功能

        每個變量明確好定義

        每個變量都用到了

全局變量

    全局變量在程序中的任何地方都可以進行存取。即使使用全局變量是沒有危險的,使用它也絕非最好的編程

方法。

  伴隨全局變量的常見問題

    如果不加選擇的使用全局變量,或者不使用熱門就翻到很不方便,那你可能沒有充分意識到信息隱蔽和模塊化的好處。

最好盡可能使用子程序和模塊。

    對全局數據的疏忽改變。

    全局變量會損害模塊性和可管理性。

    全局數據妨礙重新使用新的代碼。

怎麽樣降低全局數據帶來的危險

    1)先使所有變量成為局部的,然後再根據需要把其中某一些改為全局。

    2)區分全局和模塊。

    3)建立使你一眼即可識別出全局變量的命名約定。(C# 采用微軟命名,如 mTestId)

    4) 不要通過龐大的數據放入龐大的變量,同時又到處傳遞它來掩蓋你使用了全局變量的事實。

把什麽都放入一個巨大的結構,可能從字面上滿足了避免使用全局變量這準則,但這只是表面文章,事實

上這樣做,得不到任何真正模塊化的好處,如果你使用了全局便利的話,那就分開使用它,不要企圖用臃腫

的數據結構來掩蓋它。

    5)用存取子程序來代替全局數據

      優點:可以對數據進行集中控制,如果你以後找到了更合適的數據結構,那麽不必再每一處涉及到

數據的地方都進行修改,而只修改存取子程序就可以了,修改的影響可以被限制在存取子程序的內部。

       怎樣存取子程序:將數據隱含在模塊中,編寫可以使你訪問並修改的子程序,數據所在模塊之外的子程序要求存取數據時,

應讓它通過存取子程序而不直接存取模塊內的數據。比如,假設有一個狀態變量你可以通過兩個存取子程序GetStatus(),SetStatus()來對

其進行存取操作。

       不要把所有的全局數據都放在一個模塊:如果你把所有的全局數據都歸成一個大堆,並編寫對其存取的子程序,的確可以消除右

全局數據帶來的問題,但同時也拋棄了信息隱蔽和抽象數據類型所帶來的優點。編寫存取子程序之前,應

先考慮一下每一全局數據應屬於哪一個模塊,然後把這個全局數據,相應的存取子程序和其關聯的子程序

放入那個模塊。

        把對數據的所有存取保持在同一抽象水平上:如果你用了某一存取子程序對某一數據進行了一項操作,那麽

對這一數據的其他操作也應通過存取子程序來實現。比如若是通過存取子程序來從數據結構總讀取數值的,那麽對該數據結構的

寫操作也應通過子程序來實現。

        

    小結:

      使用數據時通常要考慮的一些問題

        I.一般數據

          是否使變量的作用域盡可能的小。

          是否把對變量的使用集中到了一起。

          每個變量是否僅有且只有一個功能。

          每個變量的含義都是明確的嘛,保證每個變量都沒有隱含的意義。

          每一個變量都被用到了嘛。

        II.全局變量

          是否在迫不得已的情況下,才使某些變量成為全局的。

          命名約定對全局,模塊,局部變量進行了區分。

          是否說明了所有全局變量。(寫註釋)

          程序中應該不含有偽全局變量(龐大而臃腫的數據結構)

          是否用子程序代替全局數據。

          是否存取子程序和數據組織層模塊而不是隨意歸成一堆的。    

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

        盡量減少變量的作用域。

        把對變量的引用集中到一起,應盡量使用變量成為局部或者模塊的,避免使用全局變量。

        使每個變量有且僅有一個功能。

        並不是因為全局數據危險才去使用它們,之所以避免用它是因為可以用更好的技術代替它。

        如果全局數據確實不可避免的話,應通過存取子程序來對其進行存取操作。存取子程序不僅具備全局

變量和功能,而且可以提供更多額功能(C# 屬性的使用)。

  

        

        

      

        

  

《代碼大全》三:變量