[英]What is a good naming convention for a routine that sets a global variable in the same class
代碼完成(第7章,第3節)說,應該為它返回的值命名一個好的函數,而在類中應該為它的作用命名一個好的過程名稱。
當我在Delphi(2009之前)中編寫同步方法時,有時需要使用它們來設置全局變量,這似乎是不好的編程習慣,但由於無法傳遞變量,因此這是必須的。 我不想將它們稱為“獲取”或“設置”,因為我將它們用於屬性方法。
有沒有更好的命名約定?
我不想將它們稱為“獲取”或“設置”,因為我將它們用於屬性方法。
這似乎是一個非常武斷的決定。 您是否可能還說過不想在“ setName”上使用“ set”,因為您也在“ setAge”上使用了它?
就是說,帶有setter的靜態變量實際上是一個公共全局變量ALA Basic-您確定這是完成任務的唯一方法嗎?
我並不是說靜態絕對是錯誤的,但是您應該盡最大努力在定義它的對象中操作它,而不要使用setter,否則您將以一種很難的方式暴露對象的很多內部狀態控制。
我想說來自Code Complete的建議非常有力,而您的反對“因為我將那些用於我的屬性方法”是很弱的。 無論如何,這些財產設定者應該是私人的。 將其視為重載的一種形式,並將其稱為SetFoo和GetFoo。
您正在使用哪個Delphi版本? 如果使用D2006或2007,則可以使用類方法將全局變量移到類屬性中,以獲取和設置值。 由於這些是屬性獲取器和設置器,因此使用Get和Set是合適的。
type
TMyObject = class(TObject)
private
class var
FStringProperty : string;
class function GetStringProperty: String; static;
class procedure SetStringProperty(const Value : string);static;
public
class property StringProperty : String read GetStringProperty write SetStringProperty;
end;
屬性獲取器和設置器沒有以get和set開頭的名稱,因為這是為命名獲取器和設置器保留的約定。 他們之所以有這些名字,是因為他們就是這樣做的 。 由於同步方法的目的是設置變量的值,因此給它取一個“設置”名稱是很有意義的。
您可以選擇一個同義詞動詞(例如Assign或copy)來區別於set ,但出於您描述的目的,這些動詞是非常規名稱。 當您有一個設置Foo
值的例程時,約定規定該函數必須命名為SetFoo
。 最終,我認為您只需要克服有關使用get和set來處理非屬性訪問器的麻煩。
在我看來,寫全局變量應該很容易與普通的二傳手區分開。 如果無法避免使用全局變量,我通常會使用
SetGlobalFoo(...);
以此目的。 長名稱的開銷是可以的IMO,因為這些構造應很少使用。
我將SetXXX
和GetXXX
用於私有變量和全局變量,因為我看不到這些方法的區別。 SetXXX
的操作是對數據區域的設置。 如果該數據區域是全局的,本地的或遠程的,則它是方法的內部細節,不應從外部看到。
IDE將幫助您了解該數據區域是否是本地數據,但是如果您願意,可以編寫簡單的注釋行來說明它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.