好的Java代碼只要一個return語句程序員
導讀:原文根據做者Jasone Tee在theserverside.com上發表的一篇《A return to Good Code》 翻譯而來。譯文來自外刊IT評論《只要一個返回語句》。ide
別再這樣寫了:spa
public boolean foo() {
if (true) {
return true;
} else {
return false;
}
}.net
每次當我深刻某個開源項目,看到大概是某個專家寫的、並被有經驗的專業人士審查過的這樣的代碼,我都會驚訝不已,居然沒有人去阻止這個開發者在這個方法裏胡亂的放置返回語句。翻譯
請告訴我,把代碼寫成下面的樣子很難嗎?code
public boolean foo() {
boolean flag = true;
if (true) {
flag=true;
}
else {
flag=false;
}
return flag;
}server
這是Java基本常識。實際上,這不只是Java基本常識,這是小學水平的Java知識。若是你的方法返回一個值,你應該在方法的開始處把它聲明作一個變量。而後再去作一些賦予這個變量正確意義的操做。而後,在你的最後一行,把這個變量返回給調用程序。這樣作不單單是爲寫出好的代碼,這是一種有教養的表現。ip
你是否曾試圖修改過一些在方法裏處處都是返回語句的程序代碼?無從下手。事實上,去維護這樣的代碼,你第一要作的是從新組織它的結構,讓它裏面再也不有一大堆的返回語句。這樣才能把事情作好。沒有任何一個方法是不能夠寫成只在末尾處有一個的、單一的、易於找到的返回語句的形式的。開發
的確,爛程序員總有一萬個理由來講明他們爲何編寫出這樣糟糕的程序代碼。「我只是爲了不在返回時一堆的多餘的條件判斷語句。」那好,首先,我告訴你,計算機中執行一些條件判斷語句時是該死的快,你用短路一個方法來節省CPU的一兩個指令操做不是顯的太荒誕了嗎。此外,若是這些所謂多餘的條件判斷語句最終沒有派上用場的話,這是不是一個有用的信號來講明你的「多餘」的代碼可能須要重寫,也許能夠把它們重構成另一個方法,讓它們顯的很少餘?get
關鍵要說的是,沒有任何理由能夠爲寫糟糕的代碼或當懶惰的程序員作託辭,特別是當寫出好的代碼並非那麼困難的狀況下。不要在寫出裏面有成百上千個返回語句的方法了。Java裏的方法只能夠返回一個值,相應的,一個方法應該有且只有一個返回語句。