簡體   English   中英

公共變量是否比使用 getter 和 setter 更快?

[英]Are public variables faster than using getters and setters?

我正在為我正在制作的游戲編寫自定義物理引擎,我的物理對象類有大量變量(距離、速度、加速度、質量、重力、力、脈沖持續時間等......)。 為每個變量創建一個 setter 和 getter 函數會影響性能嗎? (在給定時間至少有 100 個此類的實例)

我還應該創建 setter 和 getter 嗎? 我聽說公共變量是非常糟糕的做法,但是有很多變量,這可以是一個例外嗎?

為每個變量創建一個 setter 和 getter 函數會影響性能嗎?

至於簡單的 getter/setter 函數,它們通常可以由編譯器內聯,因此不會對性能產生影響。

我還應該創建 setter 和 getter 嗎? 我聽說公共變量是非常糟糕的做法

公共變量本質上並不是一種不好的做法,盡管通常您希望將數據封裝在一個類中,尤其是在對它們應用了計算的情況下。

只提供 getter/setter 函數的類是無用的,它們通常可以簡單地替換為具有所有公共變量的struct

為每個變量創建一個 setter 和 getter 函數會影響性能嗎? (在給定時間至少有 100 個此類的實例)

可能沒有。 理論上是的,但在實踐中,調用額外函數來獲取特定值的成本可以忽略不計。 它會影響性能的唯一方法是,如果你最終調用這些方法的時候(比如說......每秒50000次)。

我還應該創建 setter 和 getter 嗎?

可能沒有。 好的 OO 設計遵循稱為“告訴,不要問”的准則。 通常你應該看到你需要這些變量的哪些操作,然后要么在類中實現這些操作,要么在具有訪問權限的類中實現它們,或者使用不同的模型(訪問者模式)。

我聽說公共變量是非常糟糕的做法,但是有很多變量,這可以是一個例外嗎?

擁有公共變量並不是壞習慣。 當你有不變量時,擁有公共變量是不好的做法。

例如,如果您有一個測量物體重量的變量,您將需要確保它不能設置為無效值(例如負值或大得離譜的值)。 如果您將變量設為公開,您將不得不檢查您在客戶端代碼中修改它的任何地方設置的值,或者放棄驗證該值。

兩者都不好,因為它們是錯誤,如果您有正確的 setter 和驗證,它們就不會存在。

簡而言之,只有當您沒有不變量時,才可以接受公共變量。

注意事項:

  • 使用公共變量,如果設置變量類型允許的任何值都可以,在任何時候(你沒有不變量)

  • 如果您有不變量,請使用私有變量。

  • 使用公共方法來定義操作,而不是“訪問內部變量”。

  • 當您從客戶端代碼查看公共 API 時,根據您希望執行操作來設計您的公共 API,而不是根據內部實現中存在變量

在這種情況下,getter 和 setter 有時(很少)有意義,但不是因為類中有變量。

  • getter 和 setter 是試圖在錯誤的地方解決問題的症狀:如果類 A 中的操作 X 使用類 B 中的變量,那么您可能應該在類 B 中定義操作 X,然后從類 A 中調用它.

簡單的公共變量違反了 OO 設計原則,但 getter setter 沒有,這就是為什么我們需要用戶總是 getter 和 setter

暫無
暫無

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

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