在項目開發(fā)的過程中,往往code review的過程中,總會有同事提出這樣的comments. “Please use getter and setter”, 這個問題真的很困惑我,getter,setter在代碼編程的時候到底有什么好處呢?在我還沒有深入了解之前,我淺顯的認(rèn)為,getter和setter不僅讓代碼顯得很復(fù)雜,而且還要定義額外的私變量,除了對屬性需要做特殊處理的時候,一般情況都是能不用則不用。下面就來探討下getter和setter到底有什么過人之處,到底什么時候應(yīng)該使用他。
getter(reading)和setter(writing)的中文名字是訪問器,存儲器。顧名思義,是用來獲取和設(shè)置變量的。閱讀了其他面向?qū)ο笳Z言(C#, Java)對于getter, setter優(yōu)點, 在這里概括為:
1. 對于面向?qū)ο笳Z言來說,把成員變量直接暴露在外不符合OOP的封裝性原則,不安全, 應(yīng)使用getter和setter來取值和賦值。
2. 這兩個方法可以方便增加額外的功能(比如條件過濾,驗證)等等。
3. 內(nèi)部存儲和外部表現(xiàn)不同。(不是很理解此觀點)
4. 可以保持外部接口不變的情況下,修改內(nèi)部存儲方式和邏輯。
5. 任意管理變量的生命周期和內(nèi)存存儲方式。(不是很理解此觀點)
6. 提供一個debug接口。
7. 能夠和模擬對象、序列化乃至WPF庫等融合。
8. 允許繼承者改變語義。
9. 可以將getter、setter用于lambda表達式。(大概即作為一個函數(shù),參與函數(shù)傳遞和運算)
10. getter和setter可以有不同的訪問級別。
但對于前端typescript而言。面向?qū)ο蟮倪壿嫳旧砭筒皇呛苤?,并且所謂的繼承封壯更是少之又少,所以個人感覺還是不應(yīng)該純粹為了讀寫屬性寫getter和setter。如果getter,setter什么都不約束,寫getter或setter就沒什么太大意義了。
參考文章:https://www.zhihu.com/question/21401198