基本型別是必要的存在,因為它儲存了系統的狀態。為什麼「基本型別偏執」會是一個壞味道?因為如果我們大量地直接操作基本型別,那麼閱讀者(也就是三個月後的我們自己)就必須從頭到底讀完,才能「猜測」出我們的業務邏輯。解決這件事的基本操作,第一個想法很直覺的就是「抽方法」。抽完方法,其實我們就可以透過給這個方法一個好命名,來提升可讀性。
然而這還沒完,這個抽出來的方法可能需要拿一到兩個數值來當成計算參數,然而這整個商業邏輯是由「數值」與「行為」組合起來的,「數值」與「行為」無法獨自存在,少了彼此都無法完整表現某個業務邏輯。既然如此,那我們不如就把這兩個傢伙抽出來另外放到一個「物件」中,這個物件身上有數值也有行為,因此它可以不靠別人,自己獨立完成一整件事。如此一來,原程式中需要讀一整段才能了解的抽象業務邏輯,可以用簡單的「叫這個物件去做事」來取代即可。
物件,就是有值、有行為的『實體』,而類別則是系統拿來產生物件的「範本」。一個物件有值又有行為有什麼好處?除了上述的呼叫端的語言表現力以外,最大的好處就是當要「修改」時,不論要改數值還是要改行為,我們都直接進來這個物件修改,這會讓外部因此修改而產生的影響能縮到最小。
我們知道,bug 總在修改時。每當因需求改變,受影響的範圍能縮小,那麼我們改起來也就不會那麼麻煩,對改錯這件事也不會那麼害怕了。