代碼中如何避免過多的if else

來源:互聯網
上載者:User

在開發中 if else 實在是多啊
  剛敲完代碼,看了下 又發現N多個 if else啊
  希望大家給個好的建議啊

--------

use pattern, such as chain of responsibility

--------

enum

--------

我是來接分的,不可避免的邏輯判斷,該寫的還得寫

--------

樓上的。用枚舉的話不是還得if判斷枚舉值的情況麼。

這個看業務需求了。如果業務的條件本來就多。我覺得難免會多。

--------

1、能用條件三元運算子的時候盡量用,但是商務邏輯可能會看不清晰

2、能用switch的時候盡量用

3、多用if{ return; }...if{ return; }...結構,或者while(true) { if { break; }...if { break; }...break; }結構(用於不方便退出整個方法的時候,但有死迴圈風險,代碼習慣好的可以用),分支條件清晰,多層嵌套if...else...最容易犯錯誤

4、盡量分拆方法,讓if...else...裡面只有一句方法調用,邏輯也清晰

目前採用的就這麼多,樓主可以參考一下。

--------

枚舉可以有自己的方法,而且每個方法的實現可以不同,當然枚舉不是萬能的,不過也能解決一部分問題

使用switch或者enum,如果項目很大或者涉及到系統的合理性來說,使用設計模式也是很不錯的選擇,比如說責任鏈設計模式:http://4ujava.javaeye.com/blog/547166

--------

邏輯重要,沒有辦法的事情 if()else if()

--------

是swing還是web哦....

--------

如果想把所有的if else邏輯都提取出來,可以考慮用規則引擎

iLog,drools這些就是來把複雜的商務邏輯通過設定檔的方式提取出來,以後改甚至加新的商務邏輯不用更改代碼了,改設定檔即可

--------

不用if else的話就只能用if return……

--------

我知道的避免ifelse的方法:
第一種是表驅動法:就是一開始就把所有的可能的資料都存放起來
第二種是用狀態/策略模式
具體採取什麼辦法,就是看你要實現的功能了....

--------

為什麼不喜歡if-else呢。。。

一般的話,多用while 來代替if 語句,尤其是當有很多if 語句的時候

if語句相對while 語句來看,存在一定的缺陷..所以建議考慮多使用while語句.

--------

if else 很常用啊,為什麼要不用if else呢。 總是要做布爾運算的麼
如果說,因為if else 很多,可以考慮用 監聽者 模式, 把邏輯判斷放到若干個監聽者裡,每個監聽者處理一種情況,有資料進來就給所有的監聽者,直到有人處理為止

本質上還是要用if else

關鍵看你的目的了

--------

用swith

--------

用 a?b:c 的格式,功能相當於if-else,格式上簡單一些,推薦~~

if

return

試試

--------

if
return

switch
case

--------

用switch,不過java的switch好像只支援int和char

還有可以用離散數學裡的關係運算把條件化簡或結合

--------

使用switch或者enum,如果項目很大或者涉及到系統的合理性來說,使用設計模式也是很不錯的選擇,比如說責任鏈設計模式:http://4ujava.javaeye.com/blog/547166
責任鏈設計模式是不是把if else封裝起來了,不是太明白,呵呵,初學。還有頭像很不錯。

如果怕if else嵌套多了會混亂,除了用模式這些方法外,我覺得可以把條件裡的邏輯寫成一個個小的private方法,如下: Java code

 if (a) { doA(); } else if (b) { doB(); } else { doC(); } doA() {} doB() {} doC() {} 



這樣看上去思路會稍微清晰一點,希望對你有協助。Good Luck!

--------

這個有可能嗎。
沒有If,這世界會怎麼樣。

--------

合理的業務規劃,實在要用就用。何必計較這個

-------

合理的業務規劃,實在要用就用。何必計較這個

有些人 比較 眼裡 看不見這些沙子 啊
不過寫代碼就應該 追求 盡量的 短小精悍啊 
結構優美  

--------

use pattern, such as chain of responsibility


  嗯 正在苦學模式啊 

--------

就是看的有點煩啊
  if else if if else 感覺這樣寫代碼和在學校還是一樣的
  看起來就是不爽啊

--------

不用 if else 我可能就不會寫程式了 

--------

以論壇文章為例子,如ForumMessage是一個模型,但是實際中文章分兩種性質:主題貼(第一個根貼)和回帖(回以前文章的文章),這裡有一個樸素的解決方案:
建立一個ForumMessage,然後在ForumMessage加入isTopic這樣判斷語句,注意,你這裡一個簡單屬性的判斷引入,可能導致你的程式其他地方到處存在if else 的判斷。
  如果我們改用另外一種分析實現思路,以對象化概念看待,實際中有主題貼和回帖,就是兩種對象,但是這兩種對象大部分是一致的,因此,我將ForumMessage設為表達主題貼;然後建立一個繼承ForumMessage的子類ForumMessageReply作為回帖,這樣,我在程式地方,如Service中,我已經確定這個Model是回帖了,我就直接下溯為ForumMessageReply即可,這個有點類似向Collection放入對象和取出時的強制類型轉換。通過這個手段我消滅了以後程式中if else的判斷語句出現可能。
--------

如何是具體的值,可以用swith(){ case:
//.....
 break;}
代替

---------

將if else用在小地方還可以,如簡單的數值判斷;在實現業務功能時一般使用設計模式解決。如果你做了不少系統,很久沒有使用if else了,那麼說明你可能真正進入OO設計的境地了。

--------

純屬個人習慣問題,在寫代碼的時候,把IF ELSE 對齊就沒這問題了

--------

曾經聽人說過,如果你的代碼中,有很多的if...else的話,說明你的代碼物件導向不好。或許是認識膚淺吧,我還是認為if和else都是邏輯判斷必須的。樓上有幾位兄弟說的,用switch替換,個人和if一樣的。沒有什麼本質的區別。

--------

該用的時候還是得用。~

--------

重構到狀態模式。

--------

你可以貼段你的代碼出來讓大家給你最佳化下 實際上有些時候由於條件的重複判斷的確會出現很多該死的if else組合 寫的時候就那麼寫吧 當你寫完的時候我希望你能換個角度 看看自己寫的這段代碼嚴謹不嚴謹

--------

在項目中是的少用點if else但是有時得用還是用點。邏輯問題的時候。但是可以使用設計模式試試規划下。最主要的是要結構清晰。

--------

曾經聽人說過,如果你的代碼中,有很多的if...else的話,說明你的代碼物件導向不好。或許是認識膚淺吧,我還是認為if和else都是邏輯判斷必須的。樓上有幾位兄弟說的,用switch替換,個人和if一樣的。沒有什麼本質的區別。


  是啊 代碼寫了幾年了啊 工作2年了啊 可發現代碼還是if else啊 看起來很不爽 啊
  氣憤啊 大家有好的方法再說說吧 分可以再加的

--------

善於用return;
一些if語句可以不需要else。一些if語句 判斷完成立,可直接返回,無需向下走。
其實if else 是別的語言無可替代的,你有時候還必須得用。
我記得switch case 好像只能用int類型作為參數的。
--------

善於用return;
一些if語句可以不需要else。一些if語句 判斷完成立,可直接返回,無需向下走。
其實if else 是別的語言無可替代的,你有時候還必須得用。
我記得switch case 好像只能用int類型作為參數的。

  int 和 char
--------

能用switch的時候不用if...else啊,效率高些嘛。

--------

不建議使用過多的if else ,switch. 因為可擴充性差,而且難維護.

可以嘗試用多態

-------- Java code

 package com.csdn; interface Animal { void speak(); } class Dog implements Animal { @Override public void speak() { System.out.println( " dog speak. " ); } } class Cat implements Animal { @Override public void speak() { System.out.println( " cat speak. " ); } } class Pig implements Animal { @Override public void speak() { System.out.println( " pig speak. " ); } } public class NoIfElse { // 比方說現在有個需求, // 通過state狀態來判斷那種動物叫 // 0讓狗叫,1讓貓叫,2讓豬叫 /** * 方法1 */ private void animalSpeak( int state) { Animal[] animals = { new Dog(), new Cat(), new Pig() }; animals[state].speak(); } /** * 方法2,沒有用到Animal介面 */ private void animalSpeak2( int state) { if (state == 0 ) { new Dog().speak(); } if (state == 1 ) { new Cat().speak(); } if (state == 2 ) { new Pig().speak(); } } public static void main(String[] args) { NoIfElse t = new NoIfElse(); int state = 1 ; t.animalSpeak(state); t.animalSpeak2(state); } } 



LZ比較下方法1和方法2

--------

條件判斷無法避免的, 充其量只是換下形式而已.!
if else 無所謂.! 但是盡量不要嵌套, 嵌套多了把你自己都套暈了的
LS的說的if return是個比較好避免嵌套的解決方案!

--------

一定是商務邏輯的問題。。。。可能是商務邏輯設計的不夠合理。。~。

--------

設計模式:
 switch 用Adapter


設計模式  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.