重構手法02:Inline Method (內嵌函式)

來源:互聯網
上載者:User

一個函數調用的本體與名稱同樣清楚易懂。在函數調用點插入函數體,然後移除該函數。

int GetRating()

        {

            return MoreThanfiveLateDeliverise() ? 2 : 1;

        }

        bool MoreThanfiveLateDeliverise()

        {

            return _numberOfLateLiveries > 5;

        }

 

 

 

int GetRating()

        {

            return _numberOfLateLiveries > 5 ? 2 : 1;

        }

 

 

動機: 有時候你會遇到某些函數,其內部代碼和函數名稱同樣清晰易讀。也可能你重構了改函數,使得其內容和其名稱變得同樣清晰。果真如此,你應該去掉這個函數,直接使用其中的代碼。間接性可能帶來協助,但非必要的間接性總是讓人不舒服。

                另一種需要使用Inline Method (內嵌函式)的情況是:你手上有一群不甚合理的函數。你可以將它們都內聯到一個大型函數中,再從中提煉出合理的小函數。實施Replace Method with Method Object (以函數對象取代函數)之前這麼做,往往可以獲得不錯的效果。你可以把所要的函數的所有調用對象的函數內容都內聯到函數對象中。比起既要移動一個函數,又要移動它所調用的其他所有函數,將整個大型函數作為整體來移動比較簡單。

                如果別人使用了太多間接層,使得系統中所有函數都似乎只是對另一個函數的簡單委託,造成在這些委託動作之間暈頭轉向,那麼就使用 Inline Method (內嵌函式)。當然,間接層有其價值,但不是所有間接層都有價值。試著使用內聯手法,可以找出那些有用的間接層,同時將那些無用的間接層去除。

做法:1、檢查函數,確定它不具多態性。如果子類繼承了這個函數,就不要將此函數內聯,因為子類午飯覆寫一個根本不存在的函數。

                2、找出這個函數的所有被調用點。

                3、將這個函數的所有被調用點都替換為函數本體。

                4、編譯、測試。

                5、刪除該函數定義。

         Inline Method (內嵌函式)似乎很簡單。但情況往往並非如此。對於遞迴調用、多返回點、內聯至另一個對象中而該對象並無提供訪問函數……每種情況都可以寫上好幾頁如果遇到這些情況,那麼就不應該使用這個手法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.