新聞中心
你見過最無可奈何的代碼是什么?今天,棧長就來總結(jié)一下我遇到過的一些神邏輯代碼,不一定很全,但我真心寫不出,真心讓我自嘆不如啊!

目前累計服務(wù)客戶近1000家,積累了豐富的產(chǎn)品開發(fā)及服務(wù)經(jīng)驗。以網(wǎng)站設(shè)計水平和技術(shù)實力,樹立企業(yè)形象,為客戶提供網(wǎng)站制作、做網(wǎng)站、網(wǎng)站策劃、網(wǎng)頁設(shè)計、網(wǎng)絡(luò)營銷、VI設(shè)計、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。成都創(chuàng)新互聯(lián)公司始終以務(wù)實、誠信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過對領(lǐng)先技術(shù)的掌握、對創(chuàng)意設(shè)計的研究、對客戶形象的視覺傳遞、對應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。
1、耍猴的好手段
還記得 XX 手機(jī)的搶購活動么,搶購按鈕的代碼類似是這樣的:
活動還沒開始就結(jié)束了。。
后面有人挖出來這段神邏輯,大家真是哭暈在廁所了,還好,搶購買手機(jī)這種我從來不參加。。
就是在前端寫死代碼造成搶購結(jié)束的假象,其實請求壓根沒有發(fā)送到服務(wù)器,或者休眠幾秒直接跳轉(zhuǎn)到搶購結(jié)束頁面,良心點的,點 10 次有一次發(fā)到服務(wù)器就不錯了,這樣耍猴是不是太好玩了?
眾所周知,為了提高服務(wù)器的承載能力,現(xiàn)在各類 APP、網(wǎng)頁等都會或多或少加入前端緩存,但上面這種耍猴的代碼也太無恥了。
2、豬一樣的隊友
大家有沒有見過這樣的代碼:
- ...
這上面的活動價比原價還貴,真是哭笑不得……
類似這樣的代碼,一些程序員在注釋中說明活動的內(nèi)容,又或者是把一些生產(chǎn)上環(huán)境的 IP、端口、用戶名、密碼等敏感信息把在注釋中,好隨時能切換……
真是豬一樣的隊友,這樣的程序員不開除么!?定時炸彈啊!
3、最牛逼的排序算法
據(jù)說是一個月薪 9K 的 Java 程序員,因老板讓他寫一個排序算法,然后他就寫了一段屌炸天的休眠排序算法,接著他就被老板開除了……
排序算法代碼大概是這樣的:
這段代碼的完整版解釋請看這篇文章:剛寫完排序算法,就被開除了…
排序排成這樣,不開除你,開除誰?
4、休眠的最高境界
- /**
- * 獲取未來幾天的日期
- * @param days 指定的天數(shù)
- * @author 微信公眾號:Java技術(shù)棧
- * @return
- */
- public static Date getNextDays(int days){
- try {
- // 休眠指定的天數(shù)
- Thread.sleep(days * 24 * 60 * 60 * 1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- // 休眠結(jié)束后返回日期
- return new Date();
- }
獲取指定日期用休眠?寫完,已笑暈在廁所。。。
完整版的解釋請看這篇文章:剛寫完這段代碼,就被開除了……。
想離職找不到借口?
那還不容易,哥送你這段加強(qiáng)版,復(fù)制這段代碼,提交打包測試上線,坐等開除。
5、真就是假,假就是真
- boolean isBoy = user.isBoy() == true ? true: false;
- if (isBoy){
- ...
- } else {
- ...
- }
布爾值可以直接拿來用,你硬要寫個三元表達(dá)式?年底績效考核了,代碼量有 KPI 么?
還有類似這樣的:
- if (xx1 == true && xx2 != true){
- ...
- } else {
- ...
- }
還有這樣的:
- if (xx1 > xx2){
- return true;
- } else {
- return false;
- }
寫得太優(yōu)雅了!
6、循環(huán)循環(huán)循環(huán)
- for (int i = 0; i < 1; i++){
- ...
- }
一個循環(huán)也用循環(huán),曾經(jīng)就遇到過這么一段,不知所云了,要改這段代碼,還要把他叫在旁邊坐著,看著改才行。。
- for (;;){
- ...
- }
死循環(huán)這么寫,我們就看不出來了么?
7、魔法值的真諦
曾經(jīng)檢查代碼時,發(fā)現(xiàn)代碼中很多魔法值,叫同事要定義成公共常量,結(jié)果來了這么一段:
- private final static int ZERO = 0;
- private final static int ONE = 1;
- private final static int TWO = 2;
- ...
看到上面的常量定義,我真想打人,雖然魔法值是沒了,但又定義了一些沒有意義的常量,完全沒有理解修改魔法值的真諦,這和脫褲子放屁有什么區(qū)別?
上面還只是一個簡單的示例,實際審查情況遠(yuǎn)比你想象的糟糕。
8、看花眼的參數(shù)
- Order order = new Order(orderNo, 1678.13, "CNY", 1, 3, "wx", 5, "1", 0, "8", 0, 1, new Date());
看到這樣的代碼,我也是醉醉的了。
我就見過同事寫出這樣的代碼,是趕時間呢,還是真的不會設(shè)計模式,一個構(gòu)造函數(shù)參數(shù)能寫這么多,且不說魔法值,這么長,看一眼都覺得頭大。
9、消失的異常
- try {
- ...
- } catch (Exception e) {}
程序捕捉了異常,卻不打印。
- try {
- ...
- } catch (Exception e) {
- e.printStackTrace();
- }
錯誤是輸出來了,但沒有輸出到日志文件。
- try {
- ...
- } catch (Exception e) {
- logger.info("...", e);
- }
日志級別用的不對,去錯誤日志文件里面死活找不著錯誤日志。
上面的種種不規(guī)范的寫法,在生產(chǎn)環(huán)境出現(xiàn)問題時,一方面導(dǎo)致排查問題艱難,另一方面,監(jiān)控系統(tǒng)也不能及時地監(jiān)控到異常。
10、神奇的if
最后一個了,壓軸了。。
來,我們一起賞析下這段神奇的 if 代碼:
- if(user.getFirstName() != null)
- if(user.getMiddleName() != null)
- if(user.getLastName() != null)
- if(user.getNickName() != null)
- if(user.getShortName() != null)
- if(user.getFullName() != null)
- if(user.getFamilyName() != null)
- if(user.getEnglishName() != null)
- ...
- return true;
- return false;
這段代碼夠奇葩了吧,一個 if 能搞定的非要寫這么長,還縮進(jìn)得這么有層次感。。
小結(jié)
寫神邏輯代碼的人才這么多,找問題、解決問題真是太難了。
標(biāo)題名稱:代碼寫成這樣,老夫無可奈何!
網(wǎng)址分享:http://www.dlmjj.cn/article/dpcoshi.html


咨詢
建站咨詢
