簡體   English   中英

在同一類中設置全局變量的例程的良好命名約定是什么?

[英]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;

屬性獲取器設置器沒有以getset開頭的名稱,因為這是為命名獲取器設置器保留的約定。 他們之所以有這些名字,是因為他們就是這樣做的 由於同步方法的目的是設置變量的值,因此給它取一個“設置”名稱是很有意義的。

您可以選擇一個同義詞動詞(例如Assigncopy)來區別於set ,但出於您描述的目的,這些動詞是非常規名稱。 當您有一個設置Foo值的例程時,約定規定該函數必須命名為SetFoo 最終,我認為您只需要克服有關使用getset來處理非屬性訪問器的麻煩。

在我看來,寫全局變量應該很容易與普通的二傳手區分開。 如果無法避免使用全局變量,我通常會使用

SetGlobalFoo(...);

以此目的。 長名稱的開銷是可以的IMO,因為這些構造應很少使用。

我將SetXXXGetXXX用於私有變量和全局變量,因為我看不到這些方法的區別。 SetXXX的操作是對數據區域的設置。 如果該數據區域是全局的,本地的或遠程的,則它是方法的內部細節,不應從外部看到。

IDE將幫助您了解該數據區域是否是本地數據,但是如果您願意,可以編寫簡單的注釋行來說明它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM