国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

不要if else的編程

開發 項目管理
條件控制是編程中與生俱來的一種結構,但對于我來說,除了給我帶來麻煩外,沒有發現任何的用處。一次又一次,我不斷發現,越少的if語句,越少的 switch語句,越少的循環,就會是越好的代碼。通常這其中的原因是程序員用編程語言實現了更好的抽象歸納。

條件控制是編程中與生俱來的一種結構,但對于我來說,除了給我帶來麻煩外,沒有發現任何的用處。一次又一次,我不斷發現,越少的if語句,越少的 switch語句,越少的循環,就會是越好的代碼。通常這其中的原因是程序員用編程語言實現了更好的抽象歸納。他們并不是有意識的避免使用控制結構。但他 們確實做到了這些。

如果是使用一種面向對象編程語言,我們可以用多態(polymorphism)來代替switch。同樣的技巧也能用在 if語句上,但如果邏輯太簡單,這樣做就有點得不償失。當使用一種有函數式特征的編程語言時,大部分的循環執行任務我們都可以用 map,filter,fold等實現。控制結構最終從代碼中消失,這是對代碼大有好處的事。

條件控制結構的問題是,它很容易導致你把代碼修改的亂七八糟。讓我們看看下面一個簡單的if語句:

  1. if ... 
  2.     ... 
  3.   else 
  4.     ... 
  5.   end  

代碼中所有打省略號的地方都是你可以不斷添加代碼的地方。這些地方可以訪問if外面的變量。這很容易造成高耦合。更糟糕的是,人們會習慣性的在條件 控制里嵌套條件。我見過的最糟糕的代碼,里面的嵌套之深的就像是噩夢里的無底洞。我想,條件控制結構的真正問題所在是,它把各種任務混合到了一起。我相 信,你能從某種角度上看出,它是和任務單一編程原則相沖突的。

我們該怎么做?我們可不可以完全不要控制結構?我想不行,但我們可以做一些實驗來看看如何能減少對它們的使用。通常這樣做會讓我們從中學到一些新技巧,讓我們的代碼更整潔。

不久前,我開發了一些Ruby程序,我需要寫一個‘take’函數,用它從一個數組里取出一些元素。Ruby里有一些針對Enumerable的這樣的函數,但我需要一些特殊的功能。如果我需要的數組的大小超出了目標數組的大小,需要把多余的數組空間都置為0。

這看起來可以用簡單的if語句實現:

  1. def padded_take ary, n 
  2.    if n <= ary.length 
  3.      ary.take(n) 
  4.    else 
  5.      ary + [0] * (n - ary.length) 
  6.    end 
  7.  end 

讓我們認真的看一看這段代碼。它沒有向我們顯示任何填充動作的信息,沒有顯示數組跟填充的關系。如果認真看,可以看出其中的邏輯,但我們看不出這段代碼的意圖。

我們引入一些函數來讓這段代碼更清楚些,使用guard語句來簡化if語句:

  1. def padded_take ary, n 
  2.    return ary.take(n) unless needs_padding?(ary, n) 
  3.    ary + pad(ary, n) 
  4.  end 

這個短小精悍,但不是更簡單——我們可以使用一個null對象來去掉條件語句。空的數組就是很好的null對象。讓我們在來一次。

我們不需要用一個條件語句來計算填充的長度。這個長度我們可以取兩個數組中的***值,如果我們想要的長度超出了數組的長度,填充的長度就是它們的差值:

  1. pad_length = [0, n - ary.length].max 

有了這個長度,我們可以先填充數組,然后取出我們想要的元素:

  1. def pad ary, n 
  2.    pad_length = [0, n - ary.length].max 
  3.    ary + [0] * pad_length 
  4.  end 

于是,我們可以這樣定義取出動作:

  1. def padded_take ary, n 
  2.     pad(ary, n).take(n) 
  3.   end 

我們通過先進行填充從而避免了使用if語句。當然,有時候填充的是一個空數組。

我不想去爭論這樣的寫法是否比最初的if-then-else代碼更簡單,但現在的代碼的意圖更清晰了,而且我不認為這種策略在這種代碼里使用是過度技術化。

從提取歸納的層面看,代碼經過處理后的好處是明顯的。當遇到更復雜問題時,它帶來的益處將會更明顯。

原文鏈接:http://michaelfeathers.typepad.com/michael_feathers_blog/2013/11/unconditional-programming.html

譯文鏈接:http://www.aqee.net/unconditional-programming/

責任編輯:陳四芳 來源: 外刊IT評論
相關推薦

2013-11-28 10:22:37

編程結對編程

2021-03-04 21:57:12

Python編程語言計算

2012-05-24 10:29:54

編程程序員

2012-04-13 10:11:22

Java

2015-06-04 09:43:59

代碼注釋編程

2018-03-15 09:23:24

編程語言程序員Java

2021-04-08 11:10:22

網絡安全C語言if…else…

2018-03-12 13:32:02

編程語言程序員語言

2013-03-06 10:28:57

ifJava

2011-05-23 16:23:18

Pythonelse

2017-08-02 06:10:07

Python編程語言for 循環

2010-04-20 14:59:56

面試

2011-08-24 10:43:35

2023-06-02 07:30:24

If-else結構流程控制

2011-05-27 16:58:19

2018-07-16 16:29:26

編程函數代碼

2021-04-13 06:39:13

代碼重構code

2021-02-25 09:35:32

語句elsePython

2021-03-10 07:20:43

if-else靜態代碼

2025-07-04 01:55:00

CSS樣式Chrome
點贊
收藏

51CTO技術棧公眾號

亚洲欧美中文日韩v在线观看| 亚洲二区在线视频| 亚洲午夜久久久影院| 欧美18xxxxx| 成人av免费网站| 色噜噜狠狠一区二区三区| 亚洲日本天堂| 91精品国产91综合久久蜜臀| 天堂91在线| 精品福利在线看| 精精国产xxxx视频在线动漫| 国产成人免费网站| 99re在线| 国产综合欧美| 清纯唯美日韩制服另类| 456亚洲精品成人影院| 91精品久久久久久久91蜜桃| 最美情侣韩剧在线播放| 亚洲欧美日韩人成在线播放| 欧美大尺度做爰床戏| 国产三级欧美三级| 最新天堂中文在线| 亚洲免费高清视频在线| 中文字幕不卡免费视频| 欧美日韩在线视频一区二区| 亚洲日本va中文字幕久久| 欧美日韩亚洲高清| 日本成人一区| 精品区一区二区| 人成在线免费视频| 91精品国产91久久综合桃花| 夜鲁夜鲁夜鲁视频在线播放| 日韩中文在线视频| 国产女人18毛片水真多18精品| 国产91色在线| 蜜桃av一区| 成人免费看黄网址| 美女性感视频久久| 黄色一级片网址| 亚洲免费在线视频一区 二区| 伊人再见免费在线观看高清版 | 欧美精品一区二区免费| 久久不见久久见中文字幕免费| 国产精品吹潮在线观看| 亚洲激情国产| 久久美女艺术照精彩视频福利播放| 丝袜制服影音先锋| 狠狠色狠色综合曰曰| 午夜成人影视| 在线观看国产欧美| 亚洲三级网页| 欧美一区二区三区成人久久片| 精品一区二区三区视频在线观看| 日韩欧美一级在线| 香蕉久久一区二区不卡无毒影院 | 久久久久久9| 91午夜国产| 精品国产sm最大网站免费看| 中文字幕在线播放网址| 欧美在线视频网站| 亚洲日本视频| 国产精品一区二区羞羞答答| 欧美激情一区二区三区蜜桃视频| 日韩午夜影院| 午夜剧场成人观在线视频免费观看| 亚洲综合另类| 日本大臀精品| 91精品综合久久久久久五月天| 99精品热视频| 天堂俺去俺来也www久久婷婷| 欧美激情www| 水蜜桃精品av一区二区| 精品国产乱码久久久久久夜甘婷婷 | 成人福利视频在线观看| 天天操综合520| 丝袜足脚交91精品| 欧美精品日韩精品| 国产在线日韩精品| 国产区视频在线观看| 少妇av一区二区三区| 久久国产欧美日韩精品| 午夜探花在线观看| 亚洲少妇最新在线视频| 视频一区欧美| 黄网在线观看| 这里只有精品66| 欧美老肥妇做.爰bbww| 亚洲中字在线| 自拍偷拍第1页| 亚洲xxxx做受欧美| 91国产丝袜在线播放| 香蕉成人久久| 四虎成人精品一区二区免费网站| 国产经典一区二区| 欧美精品丝袜中出| 99视频一区二区| 青青草91久久久久久久久| 欧美黑人激情| 黄色片久久久久| 91在线中文字幕| 欧美成人性战久久| 欧美激情综合网| 日韩午夜在线电影| 日本在线视频一区二区三区| 色就是色亚洲色图| 国产精品wwwww| 精品久久久久久一区| 五月天中文字幕一区二区| 色琪琪久久se色| 欧美黄色a视频| 91小视频xxxx网站在线| 亚洲久久中文字幕| 四虎永久国产精品| 久久影院中文字幕| 日韩美女一区二区三区四区| 亚洲黄色尤物视频| 亚洲性人人天天夜夜摸| 黄色网在线看| 色婷婷精品国产一区二区三区| 久久久av网站| 日韩一级大片在线观看| 亚洲午夜一区二区| 久久久亚洲国产美女国产盗摄| 国产亚洲在线| 成人在线国产| 欧美电影在线观看完整版| 777午夜精品电影免费看| yw193.com尤物在线| 色视频www在线播放国产| wwwwxxxx日韩| www黄色在线| 亚洲国产综合自拍| 久久精品五月婷婷| 国产精品久久国产三级国电话系列| 日本不卡高字幕在线2019| 欧美高清视频免费观看| 久久伊人精品一区二区三区| 在线观看国产精品淫| 亚洲免费一在线| 自拍视频国产精品| 粗暴蹂躏中文一区二区三区| 精品亚洲va在线va天堂资源站| 欧美sm极限捆绑bd| 亚洲欧美日韩国产精品| 久久精品电影网| 中文字幕日韩专区| 久久综合网hezyo| 亚洲精品久久久久久下一站| 精品视频久久久久久| 久热99视频在线观看| 久久深夜福利免费观看| 日韩在线观看精品| 97视频在线观看免费| 国产精品手机播放| 欧美日韩中文国产一区发布| 在线一区日本视频| 天堂在线资源视频| 1769在线观看| av成人免费看| 外国成人在线视频| 亚洲日本视频| 粉嫩蜜臀av国产精品网站| 极品日韩av| 九九99久久精品在免费线bt| 国产精品宾馆| 青青草成人影院| 麻豆国产欧美日韩综合精品二区 | 亚洲欧美日韩精品久久久 | 高清国产一区二区| 黑人巨大精品欧美一区二区| 欧美一区二区视频观看视频| 欧美人交a欧美精品| 国产成人综合精品在线| 欧美性bbwbbwbbwhd| 成人拍拍拍免费视频网站| 麻豆91在线| 欧美精品三级在线| 国产日韩亚洲欧美精品| 国产嫩草影院久久久久| 国产丝袜美腿一区二区三区| 欧美精品一区二区久久久| 人体精品一二三区| 97免费资源站| 色成人亚洲网| 午夜日韩成人影院| 欧美日韩亚洲一区三区 | 国产一区二区三区色淫影院| 国产日韩欧美夫妻视频在线观看| 亚洲不卡1区| 免费观看羞羞视频网站| 我爱我色成人网| 欧美激情精品久久久六区热门| 国语自产精品视频在线看8查询8| wwwwww.欧美系列| 亚洲国产精品资源| 日产国产精品精品a∨| 99re热在线观看| 国产精品美女在线观看直播| 国产亚洲女人久久久久毛片| 欧美乱大交xxxxx|