eric-1001c
BlogJava
::
首頁
::
新隨筆
::
聯系
::
聚合
::
管理
::
3 隨筆 :: 45 文章 :: 12 評論 :: 0 Trackbacks
<
2014年8月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(2)
給我留言
查看公開留言
查看私人留言
隨筆分類
Design Pattern(1)
(rss)
UML
(rss)
互聯網商業意識(2)
(rss)
隨筆檔案
2009年10月 (1)
2008年2月 (1)
2008年1月 (1)
文章分類
Agile(1)
(rss)
Hibernate(14)
(rss)
JavaScript(2)
(rss)
JBPM(4)
(rss)
LDAP(1)
(rss)
ThinkingInJava(6)
(rss)
UML(1)
(rss)
Web(1)
(rss)
Websphere Portal(4)
(rss)
編程技巧(1)
(rss)
文章檔案
2009年10月 (3)
2008年8月 (2)
2008年7月 (3)
2008年6月 (2)
2008年5月 (1)
2008年4月 (3)
2008年3月 (8)
2008年2月 (6)
2008年1月 (7)
2007年7月 (6)
搜索
最新評論
1.?re: if/else的使用心得
想請問“使用Joshua Bloch在《effective java》中介紹的方法”,在effiective java中在哪一條,我沒找到,謝謝!
--Carter
2.?re: 接口之完全解耦[未登錄]
如果可以解釋下直接QQ我吧 120482338 多謝哈
--王杰
3.?re: 接口之完全解耦[未登錄]
評論內容較長,點擊標題查看
--王杰
4.?re: Request的getParameter和getAttribute方法的區別[未登錄]
第一次有這樣深刻的理解,謝謝牛人
--long
5.?re: Request的getParameter和getAttribute方法的區別
受教了!
--yxc
閱讀排行榜
1.?FlyWeight Design Pattern(享元模式)(轉)(475)
2.?摩爾定律其實是個魔咒(437)
3.?Web2.0企業生態系統(304)
評論排行榜
1.?FlyWeight Design Pattern(享元模式)(轉)(1)
2.?摩爾定律其實是個魔咒(0)
3.?Web2.0企業生態系統(0)
if/else的使用心得
無疑 if/else幾乎是所有編程語言的一個重要語法,我們不但可以在簡單的函數里面發現它的足跡,更不用說在具有復雜邏輯、代碼行數累累的功能里面了。所以盡管if/else是一個簡單的語法結構,但它的功能很強大。
if/else的強大使得我們在遇到任何分支邏輯里面都會優先考慮它的使用,所以無論是簡單的,還是復雜邏輯功能函數都會出現if/else,但是這種“優先考慮”更多的時候卻變成了一種慫恿和誘惑。特別在復雜邏輯功能函數里面,不乏if/else錯用、濫用和嵌套用。if/else錯用、濫用和嵌套用都會在不同程度上減少代碼的可讀性,降低代碼的可維護性,增加潛在bug的可能性。
if/else錯用。什么是if/else錯用?由于人的思維快速性,使得我們能夠一下子對一些中等復雜的邏輯理解,能夠一下子把中等復雜的邏輯結構浮現在腦海,因此在編程的時候就容易過于自信,依葫蘆畫瓢,想到哪寫到那。通常這容易使得某些人在使用if/else的時候導致錯用,下面是一個if/else錯用的例子:
1
/**/
/*
2
* 只存在A、B和C情況的邏輯
3
*/
4
if
(A)
{
5
//
dosomething
6
}
else
{
7
if
(B)
{
8
//
dosomething
9
}
else
{
10
if
(C)
{
11
//
dosomething
12
}
13
}
14
}
在這個例子里面,由于只有3個邏輯可能性,所以很容易就會分別對3個邏輯可能性的一一建立分支。也許在簡單的、行數較少的代碼里面,一一建立分支的做法并無大礙,但如果功能復雜,行數較多,代碼自描述性較差的代碼里面,你大半會被這里的邏輯搞暈的。這就是if/else錯用了,其實并不需要一一建立分支,至少在上面的例子里面,對于C的判斷是不需要的。
if/else濫用。濫用是指過多的使用if/else進行邏輯控制,同樣也是因為思維的快速性和不具有良好編程經驗的人容易煩的錯誤。例如下面的代碼:
1
if
(A
&&
B
&&
C){
2
//
dosomething
3
if
(A){
4
//
dosomething
5
}
else
{
6
if
(B){
7
//
dosomething
8
}
else
{
9
if
(C){
10
//
dosomething
11
}
12
}
13
}
14
}
很明顯上面的這段代碼不是一個良好結構的代碼段,當然這里還存在if/else錯用和嵌套用的問題。但是這就也說明了if/else錯用和嵌套用的基本原因是我們濫用了if/else,因此如果當我們使用超過3個嵌套if/else之后就應該思考這段代碼是否能夠進行重構。重構的方法很多,本文就不進行具體介紹了,有興趣可以參考Martin Fowler的《Refactoring: Improving the Design of Existing Code》以及wiki對refactoring的
介紹
。
if/else嵌套用。嵌套用很好解釋,也很好理解其害處。人腦的堆棧容量是有限的,一般不建議if/else或其他邏輯結構嵌套超過三層以上,否則人對其的記憶就會大大減弱,相信誰也不會想不斷翻之前的代碼行去查看某個東西吧。我們在說if/else濫用的例子就是一個典型的嵌套用法,層數達到4層以上。這種問題很容易產生,因為程序本來就是要控制邏輯的,邏輯存在多種分支在大部分時候我們都會遇上。那怎么避免這種嵌套用呢?要做到避免其實在一開始是很難做到的,除了經驗豐富的人除外。所以我的建議是,先把事情做對了(程序邏輯實現了),然后進行重構。對于大點的程序進行重構建議遵循Martin的觀點,先寫好相關的test。而這里的重構方法也可以說相當簡單,思路一:使用Joshua Bloch在《effective java》中介紹的方法,把嵌套里面的if/else一一揪出并放到所在嵌套層的上一層,如果揪出后還能繼續在新所在層揪到新所層的上一層就繼續揪,同時要注意else是否能消掉;思路二:是否能夠使用switch實現,3個以上的邏輯判斷用switch的話更容易讓人看懂你寫的東西。最后還應該根據實際情況,是否需要把邏輯代碼段抽取出來成為一個單獨的函數或者類。例如上例我們可以進行如下重構:
1
/*
2
* 思路一:揪if/else/
3
*/
4
if
(A){
//
dosomething}
5
if
(B){
//
dosomething}
6
if
(C){
//
dosomething}
7
8
/*
9
* 思路二:使用switch
10
*/
11
switch
(condition){
12
case
'
A
'
:
//
dosomething;break;
13
case
'
B
'
:
//
dosomething;break;
14
case
'
C
'
:
//
dosomething;break;
15
default
:
//
dosomething;break;
16
}
if/esle雖小,而且功能強大,但如果不正確使用,不但會讓代碼維護困難,更可怕是留下潛在的bug。以上3個問題是比較普通出現的問題,只要我們細心的話,這些問題都可以避免,修改和完善。
posted on 2009-10-24 10:54
Eric-1001c
閱讀(1817)
評論(1)
編輯
收藏
所屬分類:
編程技巧
評論
#
re: if/else的使用心得
2014-08-26 18:30
Carter
想請問“使用Joshua Bloch在《effective java》中介紹的方法”,在effiective java中在哪一條,我沒找到,謝謝!
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
Powered by:
BlogJava
Copyright © Eric-1001c
主站蜘蛛池模板:
巨波霸乳在线永久免费视频
|
久久综合亚洲色HEZYO社区
|
亚洲精品福利网泷泽萝拉
|
亚洲丁香婷婷综合久久
|
国内精品免费在线观看
|
精品免费国产一区二区三区
|
久久精品亚洲综合
|
国产精品亚洲а∨天堂2021
|
99久久99热精品免费观看国产
|
亚洲国产精品不卡毛片a在线
|
亚洲午夜国产精品
|
在线播放免费人成毛片乱码
|
国产在线观看免费完整版中文版
|
亚洲黄色在线电影
|
97碰公开在线观看免费视频
|
久久精品国产亚洲麻豆
|
色妞www精品视频免费看
|
免费看韩国黄a片在线观看
|
亚洲午夜在线电影
|
免费观看男人吊女人视频
|
国产成人无码区免费A∨视频网站
|
波多野结衣免费视频观看
|
污污网站18禁在线永久免费观看
|
在线免费观看你懂的
|
亚洲精品一级无码中文字幕
|
亚洲人成人无码.www石榴
|
99爱在线精品视频免费观看9
|
亚洲网址在线观看
|
免费毛片在线视频
|
国产va免费观看
|
亚洲另类激情专区小说图片
|
baoyu122.永久免费视频
|
久久久精品国产亚洲成人满18免费网站
|
国产精品亚洲专区在线观看
|
亚洲国产精品日韩
|
玖玖在线免费视频
|
亚洲精品国产摄像头
|
亚洲免费人成在线视频观看
|
久久九九久精品国产免费直播
|
亚洲精品视频在线观看你懂的
|
日韩免费高清大片在线
|