<<代碼大全>>閱讀筆記之一 使用變量的通常事項

1、使用變量的通常事項

1.把變量引用局部化

變量應用局部化就是把變量的引用點儘量集中在一塊兒,這樣作的目的是增長代碼的可讀性java

衡量不一樣引用點靠近程度的一種方法是計算該變量的跨度(span)


示例python

a = 0
b = 0
c = 0
a = b + c



a的第一次引用和第二次引用之間存在兩行代碼,所以變量的跨度是2,b的第一次引用和第二次引用之間存在一行代碼,所以跨度是1。數組

平均跨度能夠經過計算各個跨度的平均值獲得。來看一個示例編碼

a = 0
b = 0
c = 0
b = a + 1
b = b / c



b的第一次引用和第二次引用的跨度爲1,第二次引用和第三次引用的跨度爲0,所以平均跨度爲(1 + 0) / 2 = 0.5。當把變量的引用點集中在一塊兒的時候,閱讀者能每次只關注一部分代碼,若是這些引用點之間的距離很是遠,那裏就要迫使閱讀者的目光在程序裏跳來跳去spa


2.儘量縮短變量的存活時間

存活時間是指一個變量存在期間所跨越的語句總數。變量的存活時間開始於引用它的第一條語句,結束於引用它的最後一條語句。code

注意:存活時間只關注第一次引用和最後一次引用,而不關注中間有多少次引用。長存活時間意味着一個變量歷經了許多條語句,而短存活時間意味着它只歷經不多的語句,跨度代表對一個變量引用的集中程度對象

保持較低的存活時間的好處在於可以減少攻擊窗口,由於存活時間短,該變量被錯誤或無心修改的可能性就變小了

繼承

小結

跨度:變量兩次引用之間相隔的代碼行數生命週期

減少跨度的好處:加強代碼的可讀性作用域

存活時間:變量第一次引用和最後一次引用之間的代碼行數

減少存活時間的好處:減少攻擊窗口、加強可讀性、方便重構


3.減少做用域的通常原則

1)在循環開始以前再去初始化該循環裏使用的變量,而不是在該循環所屬的子程序的開始處初始化這些變量

2)直到變量即將被使用時再爲其賦值,讓變量的賦值位置越明顯越好

3)拆分,把使用了相似的變量的語句放在一塊兒

4)開始時使做用域儘量小,以後有須要時再擴充


4.綁定時間

變量和它的值綁定在一塊兒的時間稱爲綁定時間。這一綁定是在編寫代碼的時候仍是編譯程序的時候,是在程序加載的時候仍是運行的時候?

採用越晚的綁定時間越有利,綁定時間定義的越晚,代碼就包含越多的靈活性。下面來看幾個例子



1)在編寫代碼的時候綁定值

java示例

titleBar.color = 0xFF;  //0xFF is hex value of color blue

這是典型的硬編碼,這種硬編碼技術一般是很糟糕的,由於一旦要修改這個值,那麼這個新值就沒法同代碼中其餘引用的地方保持一致了。要杜絕這種使用方式。



2)在編譯時綁定值

java示例

private static final int COLOR_BLUE = 0xFF;
private static final int TITLE_BAR_COLOR = CLOR_BLUE;
...
titleBar.color = TITLE_BAR_COLOR

TITLE_BAR_COLOR是一個具名常量,編譯器會在編譯的時候把它替換爲一個數值,這種方式有兩個好處:

a. 易於修改,一處修改就能對全部位置生效

b. 可讀性更強

補充:

private是java的關鍵字,能夠用來修飾成員變量和成員方法,被其修飾的成員只能在本類中訪問

static也是關鍵字,用static聲明的成員變量爲靜態成員變量,也稱爲類變量,類變量的生命週期和類相同,在整個應用程序執行期間都有效。

final也是關鍵字,能夠用來修飾引用、方法和類。若是引用爲基本數據類型,則該引用爲常量,該值沒法修改;若是引用爲引用數據類型,如對象、數組,則該對象數組自己能夠修改,但指向該對象或數組的地址的引用不能修改

final修飾方法時,被修飾的方法將稱爲最終方法,沒法被子類重寫,可是,該方法仍然能夠被繼承

final修飾類時,該類成爲最終類,沒法被繼承,簡稱爲斷子絕孫類。


對於Python這類解釋型語言,能夠這樣綁定

COLOR_BLUE = 0xFF   # 這裏能夠直接寫在代碼裏或者寫在配置文件裏
titleBar.color = TITLE_BAR_COLOR



3)在運行時綁定值

java示例

titleBar.color = ReadTitleBarColor();

使用一個子程序在程序運行期間讀入數值的子程序,數值來源可能註冊表或者配置文件


小結

綁定時間的有如下幾種

1)編碼時,也就是硬編碼,應杜絕這種狀況

2)編譯時,使用具名常量,推薦這種方式

3)加載時,從外部數據源讀取數據,推薦這種方式

相關文章
相關標籤/搜索