今天愚人節(jié),可以皮一下,可以開點(diǎn)玩笑,所以我決定這篇文章開啟嘲諷模式。
程序員最怕讀別人的代碼,比這個更可怕的是什么?
從別人那里接手一個老項(xiàng)目
前任程序員或者是編碼能力不行,或者是跳槽之前故意擺爛……于是,一個隱藏著一堆爛攤子的項(xiàng)目,扔給了后來接手的人。
本來以前是代碼里夾翔,后來就是翔夾代碼了。
這些翔有各種各樣的風(fēng)味,其中就有那么十八種味道最是沖人。
1. 塊里堆上我滿滿的翔
Java 中有著無數(shù)的語句塊,這些語句塊可以嵌套。于是我們有很多優(yōu)秀的產(chǎn)翔大師會在這些語句塊中不斷地嵌套,猶如無數(shù)層的俄羅斯套娃。
2. 把翔藏在注釋里,有時候它會“驚艷”了世界
有些哥們兒很雞賊的把一些代碼藏在注釋里,這些代碼可以隨時成為定時炸彈。
public static void main(String[] args) { String a = "Hello"; // \u000d a="world"; System.out.println(a); // \u000a a="hello world!"; System.out.println(a); }
上面這段代碼運(yùn)行之后,說好的“Hello”呢?
world hello world!
3. 我家大門常打開,歡迎錯誤走進(jìn)來
在 Java 中,如果你想接手一個項(xiàng)目,看到一個父類的字段是非 private 的,而子類還存在同名字段,要注意了,這個項(xiàng)目的前任可能比較渣,你可能會惱火的想給他燒紙。比如:
public class Base { public int field = 0; public int getField() { return field; } }
public class Sub extends Base { public int field = 1; public int getField() { return field; } }
你這樣測試下看看
public static void main(String[] args) { Sub s = new Sub(); Base b = s; System.out.println(s.field); System.out.println(b.field); System.out.println(((Sub) b).field); System.out.println(((Base) s).field); }
4. 我抓到了異常,但是我不想處理了,因?yàn)槲乙x職了
有些哥們兒走之前可能人未動心已遠(yuǎn),也可能是懶的處理異常,他會給你留下一個謎之空白。
public class EmptyCatchBlockTest { public static void main(String[] args) { try { int a = 4, b = 0; int c = a/b; } catch(ArithmeticException ae) { // ??? } } }
對不起,兄弟,你留下這種薛定諤的處理是想讓人幫你掀桌嗎?
5. 只要我不考慮任何意外的情況,那么項(xiàng)目就一定會出意外
有些直性子的人,認(rèn)為天下萬物都可以直來直去,就好像直男只會讓女生“多喝熱水”一樣。所以,他們寫的代碼非常直率,直接就不考慮意外情況。
public static void main(String[] args) { int a = args.length; int b = 42 / a; if (a == 1) { a = a / (a - a); } if (a == 2) { int c[] = {1}; c[42] = 99; } }
上邊的代碼很直率,既不考慮 a 可能為 0 的情況,也不考慮數(shù)組越界。直來直去,就好像“我不尷尬,尷尬的就是別人”。
6. 我要把方法里可能的異常藏起來不告訴任何人
還有些哥們也不知道是不是有什么見不得人的事情,該拋出來的異常從來不拋出來,導(dǎo)致你根本不知道發(fā)生了什么事情。
InputStream is = null; try { is = new FileInputStream("一個文件.txt"); } catch (FileNotFoundException e) { } int b; try { while ((b = is.read()) != -1) { } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } }
上面的代碼里,如果文件找不到,接手人要撞墻的。
7. 我不走正道,因?yàn)槲沂莻€光榮的產(chǎn)翔俠
還有些人,不知道從哪里學(xué)會的邪門歪道,喜歡通過在捕獲異常里寫業(yè)務(wù)邏輯。對這種人,你九陰真經(jīng)練成了梅超風(fēng)啊。
public DateTime override Add(TimeSpan ts) { try { return base.Add(ts); } catch (ArgumentOutOfRangeException nb) { // calculate how much the MaxValue is exceeded // regular program flow TimeSpan saldo = ts - (base.MaxValue - this); return DateTime.MinValue.Add(saldo) } catch(Exception anyOther) { // 'real' exception handling. } }
我就想問問,如果以異常來控制流程,那么如何在這些異常中尋找真正的異常情況?
8. 為了我走之前不出意外,我要捕獲所有的 NPE
有些哥們兒會把 NPE 捕獲住,恩,不解決問題,但是把提出問題的人給解決了。
private static void callInstanceMethodOfNull() { try { Integer age = null; age.toString(); } catch (NullPointerException exception) { Logging.log(exception); } catch (Throwable exception) { Logging.log(exception, false); } }
但是呢,這在正常的業(yè)務(wù)邏輯里很可能就把別人坑了,因?yàn)?Null 本身就是代表著一種非法狀態(tài)。拿著前朝的劍斬今朝的官,包大人干的好啊。
9. 一個方法我如果寫成一萬行,公司一定會倒閉的
有些朋友可能有分離焦慮癥,一個方法里能寫上 1 萬行代碼。對不起,讀書讀幾頁都會犯困,讀你這一萬行代碼……
10. 我要把所有業(yè)務(wù)邏輯都揉進(jìn)幾個類里,就好像女友第一次來我家
有些哥們,你看看他負(fù)責(zé)的項(xiàng)目,你發(fā)現(xiàn)整個項(xiàng)目沒幾個類。你很納悶,覺得業(yè)務(wù)很復(fù)雜,竟然可以實(shí)現(xiàn)的如此簡單嗎?你再打開他的類看源碼,哦豁,這就是個垃圾箱啊,什么都能往里塞啊。
哥們兒,這不是女朋友去你租的房子里,你為了顯得干凈,把你那些垃圾到處塞啊。
11. 是男人就來看我繼承一百層類
有些爺爺不知道怎么想的,在他們眼里可能只有兒子和老子,一個類很不得搞一百層的類繼承。你這樣繼承,您家萬貫家財(cái)還能遭得住嗎?
12. 如果我不用緩存,我就能多浪費(fèi)公司的幾臺服務(wù)器
還有些哥們兒,明明知道他這個功能可能被頻繁訪問,比如登錄的時候查相關(guān)的白名單、黑名單。哥兒們兒知道并發(fā)量大,可從來不想套個緩存,就是死從數(shù)據(jù)庫里要數(shù)據(jù)。數(shù)據(jù)庫想:生產(chǎn)隊(duì)的驢也沒我這么忙啊。
13. 線程安全?那是什么?能吃嗎?
有些號稱老程序員的老司機(jī)們,經(jīng)年有余的不管線程安全。上來口吐異步同步,可是到手上了,線程就是個后娘養(yǎng)的,不管人家的數(shù)據(jù)安全了。合著身前叫人家小甜甜,落地了叫人家牛夫人了?
14. 在我手中無物不鎖
還有些哥們兒,怕線程跟怕老婆一樣,一旦可能多線程了,上來先上個同步鎖。你打開他寫的代碼,十個方法十把鎖。于謙兒這種大戶人家也不帶這樣上鎖的啊。
15. 我只知道 ArrayList,LinkedList 它配我用嗎?
有些兄弟可能只知道 ArrayList 能放東西。就算需要動態(tài)調(diào)整的場景,哥們兒也從不考慮 LinkedList。系統(tǒng)慢的跟龜爬一樣,愣是說系統(tǒng)遇到瓶頸。
16. 我的方法里有無數(shù)的參數(shù),也許里面需要一個宇宙
有些程序大師,他需求可能比較多,性格比較貪婪。寫的方法也跟性格一樣邪惡,一個方法需要的參數(shù),從天上到地下,什么都需要。你要調(diào)他的方法,就跟有個黑洞吸住你不放一樣,陷進(jìn)去你就出不來了。放我去飛好不好?
17. 遞歸里偷偷抹掉出口條件,就讓服務(wù)器的 CPU 燃燒殆盡吧
有時候看到?jīng)]有出口的遞歸方法,你就知道,寫這段代碼的人的人生是多么悲催,他悲慘的連測試都不敢,生怕碰傷了自己。沒有出口的遞歸,就跟沒有出路的人生一樣。
18. 如果我不關(guān)閉資源,那么我就能讓公司多花些內(nèi)存錢
用了資源您不釋放,您是嫌山上的筍不夠采,下山來奪筍了吧。行行好,放了那個資源吧。
得,看到了這里,列位看官看個樂就行了,希望諸位千萬別使用這十八般兵器。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!