程序員「迷惑代碼」大賞
談到程序員,對於外行人來說一貫的印象就是格子衫大褲衩外加人字拖,蓬頭(禿頭)垢面黑眼圈,還有就是「人傻錢多死得快」🤣,這是外界對程序員固有的思想,但是作為新世紀的程序員,我們可沒那麼邋遢,白襯衫西裝褲黑皮鞋,整潔的髮型,這才是新一代碼農😎
那對於我們內行人來說呢每天接觸最多的就是代碼,代碼是程序員的一生摯友,一入代碼深似海,所以代碼也是評判一個程序員水平的標準。代碼的簡潔程度,API使用,代碼邏輯,注釋等都是評定代碼的好壞…代碼讓人看了舒服就是好代碼。
但是不同的程序員在職業生涯的不同階段可能會寫出不同水平程度的代碼,今天我們就來欣賞一下幾段令人迷惑的代碼,無關品評,博你一笑,有則改之無則加勉。
No.1
這段代碼從redis獲取一個set數據類型的集合,拿到所有集合元素smembers,然後迭代,使用一個int型的count計數器記錄元素個數,然後返回。
乍一看,這段代碼沒什麼問題,對吧?仔細一看,就發現這段代碼這樣寫好傻啊!😵
最明顯的就是使用迭代的方式計算元素個數,怕是不知道java中set集合有一個叫做size()的方法吧,直接就能返回元素個數啦。然後吶?還有沒有問題,熟悉redis的讀者都知道redis的set數據類型也有自己的API啊,我們想獲得元素個數直接jedis.scard(key)就OK啦。暈,既然用redis了,怎麼不想着把redis的基本使用搞搞清楚呢。加油啊,老弟
No.2
再來看下第二段代碼,這段代碼的大致意思是記錄某個業務功能的每月的用戶訪問量,首先接收一個前端上送的月份值,拼接成一個key,然後獲取當前用戶的用戶ID,把用戶ID存到redis的set數據類型中(自動去重),然後再通過scard返回用戶訪問量(在被告知有scard這個命令後學會用啦)。
乍一看,這段代碼沒什麼問題吧,該用的API都用了,再也不是傻傻的循環統計用戶數了。沒那麼簡單吧,把業務邏輯先和產品經理確認清楚吧老弟。相同的月份每年都有,第二年怎麼辦呢?月度訪問量一直都能查看嗎還是過一段時間看不了之前月份的了?這些都是要確認清楚的。
No.3
繼續看第三段代碼,大致意思是要從 itemList 中剔除掉一些元素,哪些元素呢,就是元素的 code 屬性不在 codeSet 中的元素,通過兩個for循環,首先遍歷itemList取出每個元素,拿出來元素的code屬性再遍歷 codeSet ,判斷相同時把元素添加到新的list中 。
。。。內層循環沒必要,codeSet.contains(code);一個API就搞定了,判空什麼的也沒加。
上面三個是本人親身經歷,公司新來的同事(兩個多月了)寫完代碼讓我進行代碼檢查發現了幾個比較低級的錯誤,來時經理告訴我這是高級人員讓我帶帶,代碼寫的可不高級啊。
No.4
第四段這個吧,之前在網上流傳過一段時間,說是去面試做的筆試題,題目是對給定的int數組進行排序。
這樣寫的哥們腦洞真的大,關鍵是還實現了
哈哈。。。不知是段子還是真的。。
No.5
第五段是前端的HTML,這段代碼有一種哲學在裏面。邏輯毫無漏洞,為什麼說我代碼不行。兄弟應對客戶提出的【清緩存】的需求,怪不得你寫代碼快呢。
哈哈,欺負客戶不懂代碼嗎?
No.6
這段代碼思路也是異常清奇,大佬是在佩服!
No.7
還有人說沒有人在注釋里對話嗎?比如一個人說:
//這一段是誰寫的?
然後另一個人在下面接:
//是我,怎麼了
然後故事就開始了…
No.8
聽女朋友講,他們公司有一女開發,做個一簽到送積分的活動,寫了倆接口給前端調,一個簽到接口,一個加積分的接口,簽到成功後告訴前端成功了,前端再調加積分的接口。
END
項目組中各個開發的水平不一,看到「迷惑」的代碼大家也不要驚慌,如果知道是誰寫的就偷偷告訴他吧。你還知道哪些搞笑代碼呢,留言評論吧。
以上就是今天的全部內容了,本文無關品評,博你一笑,有則改之無則加勉。希望各位都寫出優質代碼,走向人生巔峰!!
往期熱文:
歡迎關注,謝謝支持