• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 181  文章 - 15  trackbacks - 0
            <2009年2月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            1234567

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            My Tech blog

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

                    以前看過一點這本書的英文版本,感覺相當不錯,但是由于英文水平有限,總是感覺里面有些說法對我來說比較生澀,特別還有一些理論性的東西,如果只看英文,基本上是無從查起的.好在這本書有了中文版(也許早就有了,我可是才剛剛找到),高興之余,細細品讀,寫寫筆記,潦記于此.
                    先看看書中有關重構的定義:
                    重構的定義:在不改變代碼外在行為的前提下,對代碼做出修改,以改進程序的內部結構。本質上說,重構就是在代碼寫好之后改進它的設計。
                    這個定義說得很清楚了,基本上不需要進行任何的說明。我們只要將它當作原則去遵照就好了。
                    然后書中講了:
                    快速而隨性(quick and dirty)的設計一個簡單的程序并沒有錯。
                    于是我就有這樣的問題了:
                    什么規模的程序才值得重構?
                    然后書中給了我這樣一個回答:
                    如果你發現自己需要為程序添加一個特性,而代碼結構使你無法很方便的那么做,那就先重構那個程序,使特性的添加比較容易進行,然后添加特性。
                    重構之前要做這樣一些準備:
                    重構的第一步--為代碼建立測試環境。
            重構之前,首先檢查自己是否有一套可靠的測試機制。這些測試必須有自我檢查能力。
                    下面是一些摘錄:
                    首先在代碼中找出函數內的局部變量和參數。任何不會修改的變量都可以被當成參數傳入新的函數,至于會被修改的變量就需要格外小心。如果只有一個變量會被修改,可以把它當作返回值。
            在找出一個函數的邏輯泥潭并將之提練到另外一個函數中的時候,要格外注意返回值。如果你經常犯這樣的錯誤,那么一定確保在修改前后函數的調用結果相一致。
                    代碼應該表現自己的目的,這一點非常重要。閱讀代碼的時候,我經常進行重構。這樣,隨著對程序的理解逐漸加深,我也就不斷地把這些理解嵌入代碼中,這么一來才不會遺忘我曾經理解的東西。
                    幾個重構的方法(下面的偽碼是我自己寫的):
                    1、Extract Method (提取方法)
                    2、appending assignment ,operator+=( 附添賦值動作)
                    這兩種重構方法結合的形式為:
                    重構前:
                    A=0;
                    A++;
                    if(expression)
                      A++;
                    重構后:
                     A=0;
                     A+=function1();
                     TypeOfA function1()
                     {
                         if(expression)
                           return 2;
                         else
                           return 1;
                      }
                     3、Replace Temp with Query(字面上用查詢取代臨時變量)
                     利用所謂的query method來取代臨時變量。由于class內的任何函數都可以取用(調用)所謂query methods,所以它能夠促進比較干凈的設計,而非冗長復雜的函數。
                      Replace Temp with Query的偽碼例子:
                      A=0;
                      while(expression)
                      {
                         A++;
                       }
                      return "The Result is "+A;
                      上面A是一個臨時變量.所以可以用一個querymethod來取代:
                       TypeA function1()
                      {
                         A=0;
                         while(expression)
                         {
                            A++;
                          }
                         return A;
                       }
            這樣主程序可以這樣寫:
                       return "The Result is "+function1();
            繼續摘抄:
            重構可能會存在另外一個問題,就是性能。原本代碼只執行一次循環,在重構以后可能要執行三次。如果循環中的語句耗時很多,就可能大大降低程序的性能。單單為了這個原因,許多程序員就不愿進行這個重構動作。但是請注意這里只是“可能”。除非進行評測,否則無法確定循環的執行時間,也無法知道這個循環是否經常使用以至于影響系統的整體性能。重構時程序人員不必擔心這些,優化時才去擔心它們,但那時候你已經處于一個比較有利的位置,有更多選擇可以進行有效優化。
            使用Form Template Method(字面上建立模板方法)可以進一步減少重復代碼。這會在書后面的章節講到。
            posted on 2007-06-15 22:53 littlegai 閱讀(351) 評論(0)  編輯 收藏 引用 所屬分類: 我的讀書筆記
            国产成人无码精品久久久久免费| 色播久久人人爽人人爽人人片aV| 中文字幕无码免费久久| 欧洲人妻丰满av无码久久不卡| 久久亚洲精品成人AV| 国产成人精品久久免费动漫| 国产亚州精品女人久久久久久 | 亚洲香蕉网久久综合影视| 久久久久成人精品无码中文字幕| 国产精品久久久久乳精品爆| 亚洲中文字幕伊人久久无码| 久久精品国产亚洲av水果派 | 精品久久久无码人妻中文字幕豆芽 | 国内精品伊人久久久久777| 国产一久久香蕉国产线看观看 | 国产欧美一区二区久久| 久久婷婷五月综合97色直播| 亚洲综合熟女久久久30p| 精品欧美一区二区三区久久久| 久久综合香蕉国产蜜臀AV| 九九热久久免费视频| AV无码久久久久不卡网站下载| 日本精品久久久久久久久免费| AV无码久久久久不卡网站下载| 亚洲精品无码久久久| 国产精品18久久久久久vr | 久久w5ww成w人免费| 久久人做人爽一区二区三区| 精品久久久久久无码人妻蜜桃 | 亚洲欧美成人久久综合中文网 | 久久久精品2019免费观看| 久久中文字幕人妻丝袜| 久久夜色精品国产欧美乱| 国产成人精品久久一区二区三区av | 国色天香久久久久久久小说 | 亚洲AV无码1区2区久久| 亚洲国产精品久久久久婷婷老年 | 91精品国产91热久久久久福利| 国内精品久久久久久久久电影网| 伊人久久一区二区三区无码| 日批日出水久久亚洲精品tv|