2012-11-19 97 views
0

我正在閱讀LibGDX的源代碼,我發現類中有太多的公共字段。所以我想知道,爲什麼?是否有任何優勢,而不是設置該領域的典型制定者/獲得者?安裝者/吸氣者在遊戲編程?

我知道我應該避免直接訪問類的字段,但是如果像LibGDX的作者這樣的人這樣做,我開始懷疑「什麼是最佳實踐」。

+1

好處是,getter/setter *可以*允許不同的實現*不更改暴露的接口。在某些 - 也許大多數情況下,暴露公衆狀態這是有道理的..但是,在遊戲編程領域(特別是具有*高度耦合結構的遊戲/圖形引擎*每微秒計數*),標準 - 並且通常是有效的 - getters/setters的參數可能不成立。但我不做這樣的遊戲編程:)我會說,「使用getters/setters」,除非你知道*有一個原因不涉及,其中涉及對特定目標的性能測試。 – 2012-11-19 02:07:25

+1

最佳做法是優化是否以及何時發現瓶頸。 LibGDX意味着廣泛的重用,所以如果它的數據結構用在緊密的內部循環中,那麼使用字段而不是屬性進行微型優化可能是有意義的。 (字段訪問速度比getter調用要快,儘管如此,儘管如此,即使這樣,它也不應該慢一點。)這樣一個庫的作者也可以(也應該)花時間仔細設計他的API來不需要它在未來不可比擬的變化,所以他能夠更好地表達呼籲和交易的靈活性。 – millimoose

+2

@pst即使在遊戲編程中,當*每微秒計數*時,編譯器優化器在計數方面都比人類更好。使用可靠的OOP實踐並讓編譯器將其優化爲位(不是雙關語意思,我太逗了!),您仍然更好。如果你的訪問器方法沒有被內聯,你做了一些嚴重錯誤的事情! – corsiKa

回答

0

你不必知道這個類的實現,所以它們使你的代碼更簡單。另外,你確定你不希望它們被改變的一些變量遵守規則。所以他們確保你不會弄亂你的代碼。

+3

真的嗎?究竟getter如何讓客戶端代碼更簡單? (即使是普遍使用它們也有正當的理由,但事實並非如此。) – millimoose

+1

@millimoose Getters通過整合任何數據採集邏輯來簡化客戶代碼。如果你想返回一個空字符串,如果你的值爲null,那麼一個簡單的(和壞的)例子會是。你把它放在一個地方,而不是到處都是。你不能忘記去做。通過去除數十條,數百條或數千條重複的行,它變得更簡單。 – corsiKa