精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

詳細介紹優化函數的構成

開發 后端
函數優化是指運行效率的優化,優化后的函數執行速度應高于優化之前。本文介紹了幾種優化函數的構成,希望對你有幫助,一起來看。

下面介紹了幾種優化函數

1. Extract Method (提煉函數)

解釋:

如果發現一個函數的代碼很長, 很可能的一種情況是這個函數做了很多事情, 找找看函數中有沒有注釋, 往往注釋都是為了解釋下面一塊代碼做的什么事情, 可以考慮將這塊代碼提煉(Extract)成一個獨立的函數.

這樣做的好處不言而喻, 是面向對象五大基本原則中的單一職責原則 (Single Responsibility Principle), 比較長的函數被拆分成一個個小函數, 將有利于代碼被復用.

沖動前:

  1. public void Print(Employee employee)   
  2. {   
  3. //print employee's information   
  4. Console.WriteLine("Name:" + employee.Name);   
  5. Console.WriteLine("Sex:" + employee.Sex);   
  6. Console.WriteLine("Age:" + employee.Age);   
  7. //print employee's salary   
  8. Console.WriteLine("Salary:" + employee.Salary);   
  9. Console.WriteLine("Bonus:" + employee.Bonus);   
  10. }  

沖動后:

  1. public void Print(Employee employee)   
  2. {   
  3. //print employee's information   
  4. PrintInfo(employee);   
  5. //print employee's salary   
  6. PrintSalary(employee);   
  7. }   
  8. public void PrintInfo(Employee employee)   
  9. {   
  10. Console.WriteLine("Name:" + employee.Name);   
  11. Console.WriteLine("Sex:" + employee.Sex);   
  12. Console.WriteLine("Age:" + employee.Age);   
  13. }   
  14. public void PrintSalary(Employee employee)   
  15. {   
  16. Console.WriteLine("Salary:" + employee.Salary);   
  17. Console.WriteLine("Bonus:" + employee.Bonus);   
  18. }  

2. Inline Method (將函數內聯)

解釋:

有些函數很短, 只有一兩行, 而且代碼的意圖也非常明顯, 這時可以考慮將這個函數干掉, 直接使用函數中的代碼.物件中過多的方法會讓人感到不舒服, 干掉完全不必要的函數后代碼會更簡潔.

沖動前:

  1. public bool IsDeserving(int score)   
  2. {   
  3. return IsScoreMoreThanSixty(score);   
  4. }   
  5. public bool IsScoreMoreThanSixty(int score)   
  6. {   
  7. return (score > 60);   
  8. }  

沖動后:

  1. public bool IsDeserving(int score)   
  2. {   
  3. return (score > 60) ;   
  4. }  

3. Inline Temp (將臨時變量內聯)

解釋:

如果有一個臨時變量 (Temp)用來表示某個函數的返回值, 一般來說, 這樣的做法挺好的. 但如果這個臨時變量實在多余, 將這個臨時變量內聯之后毫不影響代碼的閱讀, 甚至這個臨時變量妨礙了其它重構工作, 就應該將這個臨時變量內聯化.

把這個臨時變量干掉的好處在于減少了函數的長度, 有時可以讓其它重構工作更順利的進行.

沖動前:

  1. int salary = employee.Salary;   
  2. return (salary > 10000);  

沖動后:

  1. return (employee.Salary > 10000);   
  2. Replace Temp With Query (用查詢式代替臨時變量) 

解釋:

程序中有一個臨時變量(Temp)用來保存某個表達式的計算結果, 將這個計算表達式提煉(Extract)到一個獨立的函數(即查詢式Query)中, 將這個臨時變量所有被調用的地方換成對新函數(Query)的調用, 新函數還可以被其它函數使用.

好處在于減少函數長度, 增加代碼復用率, 有利于代碼進一步的重構. 并且注意 Replace Temp With Query 往往是 Extract Method 之前必不可少的步驟, 因為局部變量會使代碼不太容易被提煉, 所以在進行類似的重構前可以將它們替換成查詢式.

下面的這個例子不是很有必要使用Replace Temp With Query, 主要展示如何 Replace Temp With Query. 試想"沖動前"函數中有很多個代碼塊都使用到 totalPrice, 突然有一天我發現這個函數太長, 我需要將這一塊塊的代碼提煉成單獨的函數, 這樣就需要將 totalPrice = price * num; 放到每一個提煉出來的函數中. 而如果原來函數中使用的是查詢式, 就不存在這個問題. 如果查詢式中的計算量很大, 也不建議使用 Replace Temp With Query.

沖動前:

  1. public double FinalPrice(double price, int num)   
  2. {   
  3. double totalPrice = price * num;   
  4. if (totalPrice > 100)   
  5. return totalPrice * 0.8;   
  6. else   
  7. return totalPrice * 0.9;   
  8. }  

沖動后:

  1. public double FinalPrice(double price, int num)   
  2. {   
  3. if (TotalPrice(price, num) > 100)   
  4. return TotalPrice(price, num) * 0.8;   
  5. else   
  6. return TotalPrice(price, num) * 0.9;   
  7. }   
  8. public double TotalPrice(double price, int num)   
  9. {   
  10. return price * num;   
  11. }  

5. Introduce Explaining Variable (引入可以理解的變量)

解釋:

很多時候在條件邏輯表達式中, 很多條件令人難以理解它的意義, 為什么要滿足這個條件? 不清楚. 可以使用Introduce Explaining Variable將每個條件子句提煉出來, 分別用一個恰當的臨時變量名表示條件子句的意義.

好處在于增加了程序的可讀性.

沖動前:

 

  1. if((operateSystem.Contains("Windows"))&&   (browser.Contatins("IE")))     
  2. {    
  3.  //do something    

沖動后:

  1. bool isWindowsOS = operateSystem.Contains("Windows");   
  2. bool isIEBrowser = browser.Contatins("IE");   
  3. if (isWindowsOS && isIEBrowser)   
  4. {   
  5. //do something   
  6. }  

6. Split Temporary Variable (撇清臨時變量)

解釋:

例如代碼中有個臨時變量在函數上面某處表示長方形周長, 在函數下面被賦予面積, 也就是這個臨時變量被賦值超過一次, 且表示的不是同一種量. 應該針對每次賦值, 分配一個獨立的臨時變量.

一個變量只應表示一種量, 否則會令代碼閱讀者感到迷惑.

沖動前:

  1. double temp = (width + height) * 2;   
  2. //do something   
  3. temp = width * height;   
  4. //do something  

沖動后:

  1. double perimeter = (width + height) * 2;   
  2. //do something   
  3. double area = width * height;   
  4. //do something  

7. Remove Assignments to Parameters (消除對參數的賦值操作)

解釋:

傳入參數分"傳值"和"傳址"兩種, 如果是"傳址", 在函數中改變參數的值無可厚非, 因為我們就是想改變原來的值. 但如果是"傳值", 在代碼中為參數賦值, 就會令人產生疑惑. 所以在函數中應該用一個臨時變量代替這個參數, 然后對這個臨時變量進行其它賦值操作.

沖動前:

  1. public double FinalPrice(double price, int num)   
  2. {   
  3. price = price * num;   
  4. //other calculation with price   
  5. return price;   
  6. }  

沖動后:

  1. public double FinalPrice(double price, int num)   
  2. {   
  3. double finalPrice = price * num;   
  4. //other calculation with finalPrice   
  5. return finalPrice;   
  6. }  

8. Replace Method with Method Object (用函數物件代替函數)

解釋:

沖動的寫下一行行代碼后, 突然發現這個函數變得非常大, 而且由于這個函數包含了很多局部變量, 使得無法使用 Extract Method, 這時 Replace Method with Method Object 就起到了殺手锏的效果. 做法是將這個函數放入一個單獨的物件中, 函數中的臨時變量就變成了這個物件里的值域 (field).

沖動前:

  1. class Bill   
  2. {   
  3. public double FinalPrice()   
  4. {   
  5. double primaryPrice;   
  6. double secondaryPrice;   
  7. double teriaryPrice;   
  8. //long computation   
  9. ...   
  10. }   
  11. }  

沖動后:

  1. class Bill   
  2. {   
  3. public double FinalPrice()   
  4. {   
  5. return new PriceCalculator(this).compute();   
  6. }   
  7. }   
  8. class PriceCalculator   
  9. {   
  10. double primaryPrice;   
  11. double secondaryPrice;   
  12. double teriaryPrice;   
  13. public PriceCalculator(Bill bill)   
  14. {   
  15. //initial   
  16. }   
  17. public double compute()   
  18. {   
  19. //computation   
  20. }   
  21. }  

9. Substitute Algorithm (替換算法)

解釋:

有這么一個笑話:

某跨國日化公司, 肥皂生產線存在包裝時可能漏包肥皂的問題, 肯定不能把空的肥皂盒賣給顧客, 于是該公司總裁命令組成了以博士牽頭的專家組對這個問題進行攻關, 該研發團隊使用了世界上***精尖的技術 (如紅外探測, 激光照射等), 在花費了大量美金和半年的時間后終于完成了肥皂盒檢測系統, 探測到空的肥皂盒以后, 機械手會將空盒推出去. 這一辦法將肥皂盒空填率有效降低至5%以內, 問題基本解決.

而某鄉鎮肥皂企業也遇到類似問題, 老板命令初中畢業的流水線工頭想辦法解決之, 經過半天的思考, 該工頭拿了一臺電扇到生產線的末端對著傳送帶猛吹, 那些沒有裝填肥皂的肥皂盒由于重量輕就都被風吹下去了...

這個笑話可以很好的解釋 Substitute Algorithm, 對于函數中復雜的算法, 盡量想辦法將這個算法簡單化, 從而達到與之前同樣甚至更好的效果.

本文鏈接: http://www.cnblogs.com/technology/archive/2011/05/10/2042255.html

【編輯推薦】

  1. 內嵌式的語言PHP應用技巧七則
  2. 提高PHP速度的幾種辦法
  3. 高效PHP程序必知的53個技巧
  4. 讓PHP網站跑的更快 如何優化PHP
  5. 警惕 PHP程序員最易犯10種錯誤
責任編輯:于鐵 來源: 博客園
相關推薦

2011-07-01 09:56:19

.NET

2011-06-21 11:05:41

內聯函數

2011-07-21 14:15:08

java

2011-07-21 13:51:38

java

2009-12-02 20:15:12

PHP header函

2009-12-10 09:59:49

PHP讀取目錄函數

2010-03-11 11:07:37

Python函數參數

2011-07-20 17:16:50

C++重載函數

2011-07-15 01:20:58

C指針函數函數指針

2009-06-25 14:59:39

jQuery.exte

2011-07-20 13:40:09

拷貝構造函數

2009-12-11 17:14:43

PHP中文處理函數

2009-02-24 14:27:55

2020-09-28 08:12:59

CC++時間

2024-06-13 10:05:36

2009-06-18 09:47:14

Spring的核心

2010-04-06 13:33:41

Oracle服務

2011-11-29 12:13:21

VPN

2011-07-12 17:18:23

PHPstrtotime

2022-06-13 16:09:17

PandasPython
點贊
收藏

51CTO技術棧公眾號

一区二区三区四区五区视频| 国产精品色婷婷视频| 日韩av无码一区二区三区不卡| 黄色漫画在线免费看| 久久久久青草大香线综合精品| 国产极品jizzhd欧美| 丝袜美腿小色网| 欧洲亚洲视频| 欧美一区二区在线观看| 黄色大片在线免费看| 91网在线播放| 成人91在线观看| 国产日产欧美a一级在线| 精品处破女学生| 日韩欧美视频| 亚洲成人av资源网| 欧美一级特黄aaa| 性xxxxfreexxxxx欧美丶| 亚洲欧美在线视频观看| 久久精品中文字幕一区二区三区 | 成人无码www在线看免费| 成人在线视频免费看| 亚洲va欧美va天堂v国产综合| 神马影院我不卡| 色丁香婷婷综合久久| 麻豆91精品91久久久的内涵| 欧美亚洲另类视频| 欧美精品一区二区蜜桃| 欧美www视频在线观看| 精品亚洲va在线va天堂资源站| 日本一本在线视频| 国产精品伦一区二区| 色欲综合视频天天天| 99色这里只有精品| 在线观看中文字幕的网站| 日本一区二区综合亚洲| 六月婷婷久久| 五月婷婷在线播放| 成人精品视频网站| 91偷拍精品一区二区三区| 中文字幕永久在线视频| 日韩中文欧美在线| 国产激情999| 亚洲大片免费观看| 久久激情中文| 欧美亚洲一区在线| 美日韩一二三区| 亚洲精品资源| 2019精品视频| av资源免费观看| 国产精品久久久免费| 国模精品一区二区三区色天香| 特级片在线观看| 综合国产在线| 九九九久久国产免费| 欧美日韩精品在线观看视频| 亚洲字幕久久| 欧美高跟鞋交xxxxhd| 久久久国产精品人人片| 欧美三级不卡| 国模叶桐国产精品一区| av大片免费观看| 久久aⅴ国产紧身牛仔裤| 91精品国产91久久久久久最新| jizz国产免费| 国产乱码精品| 国产精品久久av| 伊人网免费视频| 久久91精品久久久久久秒播| 91在线免费看网站| 亚洲a视频在线| 99亚偷拍自图区亚洲| 久久久久久国产精品免费免费| 欧美欧美欧美| 国产精品伦一区| 中国一级大黄大黄大色毛片| 国产精品69xx| 欧美性猛交xxxxx水多| 日韩一级理论片| 精品中文在线| 亚洲黄色免费三级| 一级黄色片网址| 亚洲香蕉av| 91精品国产91| 一区二区日韩在线观看| 福利91精品一区二区三区| 国模精品一区二区三区| h视频在线免费| 一区二区三区不卡在线观看| 男人的天堂99| 99精品国产九九国产精品| 精品福利在线导航| 人人人妻人人澡人人爽欧美一区| 国产精品videosex性欧美| 高清在线视频日韩欧美| 一区二区视频网| 成+人+亚洲+综合天堂| 日韩和欧美的一区二区| 先锋成人av| 欧美性猛xxx| 伦伦影院午夜理论片| 亚欧日韩另类中文欧美| 久久精品人人爽| 天堂网中文字幕| 国产一区999| 欧美日韩国产精品一卡| 视频在线这里都是精品| 色综合激情五月| 毛茸茸free性熟hd| 99久久99久久精品国产片桃花| 国产91ⅴ在线精品免费观看| 国产精品热久久| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲综合五月天| 中文字幕不卡三区视频| 精品久久久久久久久久久久久久久 | 成人网页在线观看| 亚洲一区二区在线免费观看| 天堂а√在线最新版中文在线| 欧美高清www午色夜在线视频| 日本japanese极品少妇| 午夜国产精品视频| 国产在线观看一区二区三区 | 日日碰狠狠添天天爽超碰97| 99久久99九九99九九九| 亚洲人成在线观看网站高清| 国产午夜小视频| 国产一区二区三区精品欧美日韩一区二区三区| 免费在线一区二区| 黄色漫画在线免费看| 日韩欧美电影一二三| 亚洲精品成人av久久| 美女诱惑一区| 激情小说综合区| 狂野欧美性猛交xxxxx视频| 69成人精品免费视频| 亚洲av毛片基地| 日韩av在线播放中文字幕| 久久综合给合久久狠狠色| 国产福利在线免费观看| 日韩亚洲欧美在线观看| 国产1区2区3区4区| 国产一区二区三区香蕉| 天堂v在线视频| 成人激情久久| 九九久久精品一区| 国产丝袜在线视频| 亚洲伦理在线精品| 激情文学亚洲色图| 久久久久免费av| 亚洲中国色老太| 伊人手机在线| 精品国产免费久久| 97超碰人人干| 91女人视频在线观看| 免费看日本毛片| 欧美重口另类| 欧美怡春院一区二区三区| 亚洲三区在线播放| 色综合久久66| 国产第一页精品| 精品一区二区av| 男人的天堂成人| 美国十次综合久久| 欧美精品久久久久| 亚州av在线播放| 91精品福利视频| 在线观看天堂av| 国产一区二区影院| 国产精品69久久久| 亚洲理论电影| 国产精品爽黄69| 麻豆视频免费在线观看| 欧美不卡视频一区| 国产乱国产乱老熟| 国产精品久久毛片a| 久久黄色一级视频| 国产欧美精品| 五月天婷亚洲天综合网鲁鲁鲁| 国产精久久一区二区| 午夜精品在线视频| 成人p站proumb入口| 欧美一区二区视频网站| 五月婷婷激情网| 中文字幕免费在线观看视频一区| 999久久久精品视频| 日韩亚洲精品在线| 伊人狠狠色丁香综合尤物| 99ri日韩精品视频| 国产精品网站大全| 成年网站在线视频网站| 亚洲深夜福利在线| 国产高中女学生第一次| 色综合天天综合| 美女福利视频在线观看| 久久久久久久久久美女| 日韩不卡的av| 久久久综合网| av日韩在线看| 日韩亚洲一区在线| 精品国产一区二区三区麻豆免费观看完整版| 欧美成人精品三级网站| 欧美第一黄色网| 91sp网站在线观看入口| 亚洲黄在线观看| 91超薄丝袜肉丝一区二区| 欧美日韩国产在线看| 欧美做爰爽爽爽爽爽爽| 久久午夜电影网| 麻豆tv在线观看| 久久99国产精品麻豆| 国产精品少妇在线视频| 精品成人一区| 大桥未久一区二区三区| 日韩精品第一区| 狠狠色噜噜狠狠色综合久| 国产一区二区av在线| 国产精品高清在线| 午夜激情电影在线播放| 欧美高清激情视频| 黄视频在线观看网站| 在线播放国产精品| 欧美新色视频| 亚洲国产成人爱av在线播放| 国产精品女人久久久| 欧美网站一区二区| 日日夜夜狠狠操| 精品久久久久久久久久久久久 | 国内揄拍国内精品久久| 一区二区在线观看网站| 国产探花一区| 久久福利电影| 人体久久天天| 国产综合18久久久久久| 136国产福利精品导航网址应用| 91精品视频免费看| 日日夜夜亚洲精品| 国产欧美va欧美va香蕉在线| av在线一区不卡| 国产精品福利观看| 婷婷六月国产精品久久不卡| 欧美在线观看视频| 亚洲人成在线网站| 欧洲精品在线视频| 欲香欲色天天天综合和网| 97超碰色婷婷| 9i看片成人免费高清| 欧美在线免费看| 伊人久久综合一区二区| 国产精品aaa| 成人在线视频观看| 成人免费视频97| 国产精品亚洲综合在线观看| 91亚洲精品在线观看| 欧美不卡在线观看| av资源一区二区| 国产精品自在线拍| 久久精品国产精品国产精品污| 老司机成人在线| 欧美精品一区在线发布| 欧美人妖在线| 亚洲精品中字| 欧美精品观看| 久久黄色片视频| 日韩精品欧美精品| 污网站在线免费| 福利电影一区二区三区| 韩国无码一区二区三区精品| 国产午夜精品理论片a级大结局| 国产一二三四区在线| 亚洲免费av高清| 精品亚洲永久免费| 色哟哟一区二区在线观看 | 狠狠色丁香九九婷婷综合五月| 欧美精品 - 色网| 成人国产精品视频| 欧美 日韩 国产 成人 在线观看| 18涩涩午夜精品.www| 国产亚洲欧美久久久久| 91精品福利在线| www.国产黄色| 亚洲欧美精品中文字幕在线| 一级毛片视频在线| 高清欧美性猛交xxxx黑人猛交| 台湾佬中文娱乐久久久| 亚洲一区久久久| 丝袜美腿综合| 亚洲第一页在线视频| 国产精品腿扒开做爽爽爽挤奶网站| 丁香婷婷激情网| 国产精品亚洲综合一区在线观看| 97人妻天天摸天天爽天天| 国产精品成人午夜| 国产精品一区二区6| 欧美三级视频在线观看| 免费观看黄一级视频| 日韩中文字幕不卡视频| 18aaaa精品欧美大片h| 国产精品久久久久aaaa九色| 超碰成人在线观看| 一区二区三区精品国产| aa国产精品| 天天操精品视频| 2020国产精品自拍| 久久视频一区二区三区| 精品福利免费观看| 国产成人毛毛毛片| 一区二区国产精品视频| 免费成人在线电影| 亚洲字幕在线观看| 久久视频在线| 国产成人av影视| www.亚洲国产| 国产探花在线免费观看| 欧洲av一区二区嗯嗯嗯啊| 天堂v在线观看| 欧美成人免费视频| 日韩毛片网站| 日韩亚洲欧美精品| 亚洲综合国产| 超碰97在线资源站| 亚洲精品va在线观看| 一级黄色片在线播放| 亚洲色图国产精品| 涩涩涩在线视频| 国产伦一区二区三区色一情| 一区二区三区四区电影| 亚洲精品视频导航| 中文字幕第一页久久| 波多野结衣啪啪| 亚洲欧美激情在线视频| 亚洲国产欧美日本视频| 精品一区二区三区免费毛片| 在线视频观看日韩| 精品影片一区二区入口| 亚洲18女电影在线观看| 亚洲精品久久久久久久久久| 欧美大胆a视频| 欧美视频二区欧美影视| 中国 免费 av| 国产专区欧美精品| 日韩欧美123区| 欧美一区二区三区视频免费 | 97超碰人人爽| 国产精品高清亚洲| 91一区二区视频| 日韩视频免费看| 精品视频在线播放一区二区三区| 亚洲第一综合网站| 国产精品91xxx| 精品无码一区二区三区电影桃花 | 久久久久国产精品区片区无码| 亚洲高清久久久| 四季av日韩精品一区| 欧美亚洲在线观看| 欧美一区二区三区激情视频| 国产精品少妇在线视频| 中文字幕av资源一区| 国产精品无码白浆高潮| 欧美乱妇40p| 牛牛影视久久网| 无码人妻h动漫| 国产精品色哟哟| 国产三级在线观看视频| 欧美精品videofree1080p| 看全色黄大色大片免费久久久| 亚洲欧美国产日韩天堂区| 国产在线91| 国产综合在线观看视频| 欧美在线首页| 国产一级免费片| 色婷婷综合久久久中文一区二区| a天堂中文在线| 91视频最新| 男人的天堂亚洲| 成年人网站在线观看视频| 欧美变态tickling挠脚心| 小草在线视频免费播放| 一区二区三区av在线| 国产成人aaaa| 久久精品视频7| 久久网福利资源网站| 国产一级成人av| jizz欧美激情18| 亚洲一区二区三区自拍| 久热av在线| 亚洲一区亚洲二区亚洲三区| 亚洲免费影院| 九九热最新地址| 亚洲欧美三级在线| 麻豆精品一区| 亚洲视频在线观看一区二区三区| 一区二区三区日韩精品视频| 欧美在线观看在线观看| 91丨九色丨国产在线| 噜噜噜在线观看免费视频日韩| 婷婷激情四射网| 亚洲精品中文字幕有码专区| 成人黄色理论片| 九九热在线免费|