自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

史上坑爹的代碼!個(gè)個(gè)讓人崩潰!

開發(fā) 后端
本文小編給大家整理了幾個(gè)比較坑爹的代碼,整理了幾個(gè)之后,實(shí)在整理不下去了,僅供大家參考,看看能不能崩潰掉!

 Java 就是這么一門神奇的語言,任何水平的人都能寫出可以運(yùn)行的代碼,但是一看代碼便知水平高低。作為一個(gè)程序員,你看過哪些坑爹代碼,你又寫過多少坑爹代碼,還有多少你不知道的坑爹代碼?

有意思的是碼云上建了一個(gè)代碼倉庫:bullshit-codes,倉庫的目的就是為了收集這些坑爹代碼,可以讓別人不掉坑或者少掉坑,可以避免自己掉坑,或許哈哈一樂!

上邊匯聚了各種編程語言的,倉庫地址如下:

https://gitee.com/oschina/bullshit-codes

本文小編給大家整理了幾個(gè)比較坑爹的代碼,整理了幾個(gè)之后,實(shí)在整理不下去了,僅供大家參考,看看能不能崩潰掉!

一、幾個(gè)坑爹代碼的目錄

1、這樣使用 StringBuffer 的方法有什么坑?

2、你寫過的最長的一行代碼有多長???

3、循環(huán)+條件判斷,你最多能嵌套幾層?

4、為了后期優(yōu)化查詢速度 ~ 頗有商業(yè)頭腦!

5、你是如何被異常玩然后變成玩異常的?

6、Stream 玩得最 6 的代碼,看過的人都驚呆了!

二、坑爹代碼 | 這樣使用 StringBuffer 的方法有什么坑?

你是否曾經(jīng)這樣使用過 Java 的 StringBuffer 類? 

  1. /**  
  2.  * Create Time 2019/5/24  
  3.  * StringBuffer追加 如癡如醉的寫法  
  4.  * @author cailong  
  5.  **/  
  6. public class Append {  
  7.     public static void main(String[] ares){  
  8.         StringBuffer sb = new StringBuffer();  
  9.         //這里都能理解  
  10.         sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><ROOT>");  
  11.         for (int i = 0; i < 10; i++) {  
  12.             //為什么到這里就要這樣寫???既然都用StringBuffer了    (這里省略集合遍歷用i代替 意思能懂就行)  
  13.             sb.append("<NSRXX>" +  
  14.                     "<NSRSBH>"+i+"</NSRSBH>" +  
  15.                     "<NSRMC>"+i+"</NSRMC>" +  
  16.                     "<DJXH>"+i+"</DJXH>" +  
  17.                     "<ZGSWJ_DM>"+i+"</ZGSWJ_DM>" +  
  18.                     "<ZGSWJ_MC>"+i+"</ZGSWJ_MC>" +  
  19.                     "<SJLY>sjzs</SJLY>" +  
  20.                     "<YWSX_DM>"+i+"</YWSX_DM>" +  
  21.                     "</NSRXX>");  
  22.         }  
  23.         sb.append("</ROOT>");  
  24.         System.out.println(sb.toString());  
  25.     }  

三、坑爹代碼 | 你寫過的最長的一行代碼有多長???

你寫過的最長的一行代碼有多長嗎?你為什么要寫這么長?是看著帥呢,還是想減少代碼行數(shù)? 

  1. List<OperationPurchaseInfo> purchaseInfoList  
  2.                 = sheet.getPurchaseInfoList()  
  3.                 .stream()  
  4.                 .filter(purchaseInfo -> purchaseInfo.getExteriorOperation()  
  5.                         .getExteriorPart()  
  6.                         .getExteriorOperationList()  
  7.                         .stream()  
  8.                         .filter(exteriorOperation -> exteriorOperation  
  9.                                 .getProcessState()  
  10.                                 .equals(ExteriorOperation.ProcessState.PROCESSING))  
  11.                         .count() != 0  
  12.                         // 訂單明細(xì)中工序?qū)?yīng)的工件下的其他工序存在加工中,  
  13.                         // 且已發(fā)給供應(yīng)商且供應(yīng)商不是當(dāng)前訂單供應(yīng)商時(shí),需要判斷  
  14.                         && (purchaseInfo.getExteriorOperation()  
  15.                         .getExteriorPart()  
  16.                         .getTeamwork() == null || !purchaseInfo.getExteriorOperation()  
  17.                         .getExteriorPart().getTeamwork().equals(sheet.getTeamwork()))  
  18.                 ).collect(Collectors.toList()); 

上面這段代碼雖然被拆開多行顯示,但本質(zhì)上是一行,一個(gè)極其復(fù)雜的賦值語句!

這種代碼是不是為了讓別人看不懂來彰顯自己的編碼水平呢?

小編覺得 Java Stream API 以及各種函數(shù)式編程方法,以及各種語法糖在某種程度讓這種糟糕代碼越來越多!

那么一起來批判一下這個(gè)代碼,或者你有什么好的解決方案呢?

四、坑爹代碼 | 循環(huán)+條件判斷,你最多能嵌套幾層?

for 循環(huán)和 if 條件判斷語句,必不可少吧。但是你見過最多嵌套的循環(huán)和條件判斷有幾層呢?或者說,你最多能容忍多少層的嵌套呢?

我們還是先來看看極端的坑爹代碼吧: 

  1. // 這個(gè)***循環(huán)嵌套,只是總循環(huán)的一部分。。。我已經(jīng)繞暈在黃桷灣立交  
  2.         if (recordList.size() > start) {  
  3.             for (int i = start; i < end; i++) {  
  4.                 Map<String, Object> map = recordList.get(i);  
  5.                 Map<String, Object> field11 = (Map<String, Object>) map.get("field"); //name -> code  
  6.                 Map<String, Object> record11 = (Map<String, Object>) map.get("record"); // code -> value  
  7.                 String catagory1 = map.get("categoryId").toString();  
  8.                 //  查詢***種類型對(duì)應(yīng)的其他類型  
  9.                 SalaryDataVo ss = JSON.parseObject(JSON.toJSONString(map), SalaryDataVo.class);  
  10.                 Page page3 = salaryManagerService.getAllRecordsByCondition(ss);  
  11.                 if (page3.getRecords().size() > 0) {  
  12.                     List<Map<String, Object>> salaryDataVos = page3.getRecords();  
  13.                     salaryDataVos = this.reSetMap(salaryDataVos, null, null);  
  14.                     for (Map<String, Object> map2 : salaryDataVos) {  
  15.                         Map<String, Object> field2 = (Map<String, Object>) map2.get("field");  
  16.                         Map<String, Object> record2 = (Map<String, Object>) map2.get("record");  
  17.                         String catagory2 = map2.get("categoryId").toString();  
  18.                         List<SalaryGroupVO> groupList2 = salaryGroupService.getSalaryGroupsItems(this.getUserCorpId(), catagory2);  
  19.                         for (SalaryGroupVO cc : groupList2) {  
  20.                             cc.setCode(cc.getParentId() + cc.getCode());  
  21.                         }  
  22.                         //計(jì)算  
  23.                         for (Map.Entry<String, Object> entity : field2.entrySet()) {  
  24.                             String keyName = entity.getKey();  
  25.                             for (SalaryGroupVO s2 : groupList2) {  
  26.                                 if ("bigDecimal".equals(s2.getItemType()) && s2.getCode().equals(field2.get(keyName).toString()) && ("部門" != keyName) && ("姓名" != keyName) && StringUtils.isNotEmpty(s2.getItemType())) { 
  27.                                      if (field11.containsKey(keyName)) {  
  28.                                         if (field11.containsKey(keyName)) {  
  29.                                             String code1 = field11.get(keyName).toString();  
  30.                                             Double newValue = 0.0;  
  31.                                             Double oldValue = 0.0;  
  32.                                             if (!record11.get(code1).toString().matches("^[0-9]*$")) {  
  33.                                                 oldValue = Double.parseDouble(record11.get(code1).toString());  
  34.                                                 if (record2.containsKey(entity.getValue().toString()) && (!record2.get(entity.getValue().toString()).toString().matches("^[0-9]*$"))) { 
  35.                                                      String value2 = record2.get(entity.getValue().toString()).toString();  
  36.                                                     newValue = Double.parseDouble(value2);  
  37.                                                 }  
  38.                                                 record11.remove(field11.get(keyName).toString());  
  39.                                             }  
  40.                                             if (code1.startsWith(catagory1) || code1.startsWith(catagory2)) {  
  41.                                                 String co = code1.replace(catagory1, "hz");  
  42.                                                 field11.put(keyName, co);  
  43.                                                 record11.put(co, oldValue + newValue);  
  44.                                             }  
  45.                                         }  
  46.                                     } else {  
  47.                                         String code = entity.getValue().toString();  
  48.                                         String str = entity.getValue().toString();  
  49.                                         Object value2 = record2.get(entity.getValue().toString());  
  50.                                         if (str.startsWith(catagory1) && str.replace(catagory1, "").startsWith("hz")) {  
  51.                                             code = str.replace(catagory1, "");  
  52.                                         } else if (str.startsWith(catagory2) && str.replace(catagory2, "").startsWith("hz")) {  
  53.                                             code = str.replace(catagory2, "");  
  54.                                         }  
  55.                                         field11.put(keyName, code);  
  56.                                         record11.put(code, value2);  
  57.                                     }  
  58.                                 }  
  59.                             }  
  60.                         }  
  61.                     }  
  62.                 }  
  63.                 List<SalaryGroupVO> sList = salaryGroupService.getSalaryGroupItemsByParentId(catagory1);  
  64.                 for (SalaryGroupVO s : sList) {  
  65.                     if (field11.containsKey(s.getName()) && s.getCode().startsWith("hz")) {  
  66.                         String k = field11.get(s.getName()).toString();  
  67.                         field11.put(s.getName(), s.getCode());  
  68.                         String value = null 
  69.                         if (record11.containsKey(k)) {  
  70.                             value = record11.get(k).toString();  
  71.                         }  
  72.                         record11.put(s.getCode(), value);  
  73.                     }  
  74.                 }  
  75.                 resultList.add(map);  
  76.                 pageInfo.setRecords(resultList);  
  77.             }  
  78.         } 

我數(shù)了數(shù),一共有 11 層的嵌套?。?!

吐槽歸吐槽,這樣的代碼邏輯有什么重構(gòu)的好方法嗎?

五、坑爹代碼 | 為了后期優(yōu)化查詢速度 ~ 頗有商業(yè)頭腦!

什么樣的程序員是一個(gè)好程序員呢?當(dāng)我們在給客戶開發(fā)系統(tǒng)時(shí)候,為了后期的優(yōu)化,預(yù)留一些埋點(diǎn)。

通過對(duì)這些埋點(diǎn)的優(yōu)化,可以讓客戶瞬間感覺系統(tǒng)在運(yùn)行速度上有質(zhì)的飛躍,讓公司順利的簽署二期開發(fā)合同,收取巨額開發(fā)費(fèi)用。

從公司角度來看,這樣的程序員就是一個(gè)好程序員。 —— 這句話不是紅薯說的! 

比如:

我想說的是:兇碟,你下手能否不那么狠啊,建議對(duì)代碼進(jìn)行優(yōu)化,改成 Thread.sleep(1000);  —— 這句話也不是紅薯說的。

或者你有什么更好的建議呢?不要覺得駭人聽聞,真有這樣的人,這樣的代碼!?。?/p>

六、坑爹代碼 | 你是如何被異常玩然后變成玩異常的?

玩 Java 的人,剛開始會(huì)被各種異常虐,空指針應(yīng)該是最常見的。多玩兩年就開始玩異常,各種奇葩異常玩法層出不窮。

你覺得下面這種異常的定義妥嗎? 

  1. /**  
  2.  * 處理業(yè)務(wù)的異常  
  3.  * 居然有一堆靜態(tài)異常,準(zhǔn)備好了隨時(shí)可以拋??  
  4.  * 錯(cuò)誤碼是字符串  
  5.  */  
  6. public class CommandException extends BaseException {  
  7.   private static final long serialVersionUID = -6354513454371927970L;  
  8.   public static CommandException PARAM_NULLnew CommandException("Command_assemble_01", "Parameter is Needed But Empty");  
  9.   public static CommandException DEVID_NULL = new CommandException("Command_assemble_02", "DevId Cannot Be Null");  
  10.   public static CommandException MDCODE_NULL = new CommandException("Command_assemble_03", "Model Code Cannot Be Empty");  
  11.   public static CommandException ORDER_NULL = new CommandException("Command_assemble_04", "Order Cannot Be Empty");  
  12.   public static CommandException TYPE_NULL = new CommandException("Command_assemble_05", "Upstream / Downstream Type Cannot Be Empty");  
  13.   public static CommandException MENUID_NULL = new CommandException("Command_assemble_06", "Menu Id Cannot Be Null");  
  14.   public static CommandException CTRLTYPE_NOT_RANGEnew CommandException("Command_assemble_07", "Ctrltype Cannot Be Recognized, Which is not in Range");  
  15.   public static CommandException CMD_NULL = new CommandException("Command_analyze_01", "CMD Cannot Be Null");  
  16.   public static CommandException PAYLOAD_NULL = new CommandException("Command_analyze_02", "Payload Cannot Be Null");  
  17.   public static CommandException FRAMEWORK_FAILEDnew CommandException("Command_analyze_03", "Framework Failed to be Checked");  
  18.   public static CommandException CHECK_FAILEDnew CommandException("Command_analyze_04", "Command Failed to be Checked");  
  19.   public static CommandException CONFIGURE_NOT_EXIST = new CommandException("Command_error_1001", "Configure is not Exist");  
  20.   public static CommandException REDIS_ERROR = new CommandException("Command_error_1002", "Cache Command in Redis Error", true);  
  21.   //省略構(gòu)造函數(shù)、get/set方法  

如果不妥,有什么問題呢? 

七、坑爹代碼 | Stream 玩得最 6 的代碼,看過的人都驚呆了!

Stream 作為 Java 8 的一大亮點(diǎn),它與 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。Java 8 中的 Stream 是對(duì)集合(Collection)對(duì)象功能的增強(qiáng),它專注于對(duì)集合對(duì)象進(jìn)行各種非常便利、高效的聚合操作(aggregate operation),或者大批量數(shù)據(jù)操作 (bulk data operation)。Stream API 借助于同樣新出現(xiàn)的 Lambda 表達(dá)式,極大的提高編程效率和程序可讀性。

那么 Java 8 的 Stream 到底是王者,還是個(gè)巨坑,這完全取決于你是怎么玩的?

我不得不說,下面代碼是我從業(yè) 20 年(說誰呢,誰從業(yè) 20 年,我今年 19  歲!?。。┛催^最牛逼的 Stream 的用法: 

  1. //Stream 用的66的  
  2. final EventAction eventAction = redisObj 
  3.                 EventActionKey + distributionEventId,  
  4.                 () -> Optional  
  5.                         .of(distributionEventId)  
  6.                         .map(eventId -> {  
  7.                             final EventActionExample example = new EventActionExample();  
  8.                             example.createCriteria()  
  9.                                     .andEventIdEqualTo(eventId)  
  10.                                     .andTriggerTypeEqualTo(EnumEventTriggerType.DISTRIBUTION_PURCHASE.getCode().byteValue());  
  11.                             return example;  
  12.                         })  
  13.                         .map(eventActionMapper::selectByExample)  
  14.                         .filter(StringUtil::isNotEmpty)  
  15.                         .map(e -> e.get(0)).orElseThrow(() -> ExceptionUtil.createParamException("事件觸發(fā)信息不存在"))  
  16.                 , EventAction.class);  
  17.         final AwardConfig awardConfig = redisObj(EventConfigKey + eventAction.getId(),  
  18.                 () -> Optional.ofNullable(eventAction.getId())  
  19.                         .map(actionId -> {  
  20.                             final AwardConfigExample example = new AwardConfigExample();  
  21.                             example.createCriteria()  
  22.                                     .andActionIdEqualTo(actionId);  
  23.                             return example;  
  24.                         })  
  25.                         .map(awardConfigMapper::selectByExample)  
  26.                         .filter(StringUtil::isNotEmpty)  
  27.                         .map(e -> e.get(0)).orElseThrow(() -> ExceptionUtil.createParamException("xxx")),  
  28.                 AwardConfig.class  
  29.         );  
  30.         Optional.of(req)  
  31.                 .map(e -> e.clueUid)  
  32.                 .map(id -> {  
  33.                     final ClueExample example = new ClueExample();  
  34.                     example.createCriteria()  
  35.                             .andClueUidEqualTo(id)  
  36.                             .andDeletedEqualTo(false)  
  37.                             .andReceivedEqualTo(false)  
  38.                             .andCreateTimeGreaterThan(now - cluetime);  
  39.                     example.setOrderByClause("create_time asc");  
  40.                     return example;  
  41.                 })  // 獲取該被邀請人所有未過期且未被領(lǐng)取的線索的線索  
  42.                 .map(clueMapper::selectByExample)  
  43.                 .filter(StringUtil::isNotEmpty)  
  44.                 .ifPresent(clues -> {  
  45.                             final ClueResp clueResp = Optional.of(req)  
  46.                                     .filter(c -> {  
  47.                                         c.count = clues.size();  
  48.                                         return true;  
  49.                                     })  
  50.                                     .map(this::awardValue)  
  51.                                     .orElseThrow(() -> ExceptionUtil.createParamException("參數(shù)錯(cuò)誤"));  
  52.                             final Integer specialId = req.getIsHead()  
  53.                                     ? clues.get(0).getId()  
  54.                                     : clues.get(clues.size() - 1).getId();  
  55.                             clues.stream()  
  56.                                     .peek(clue -> {  
  57.                                         final AwardConfig awardConfigclone = Optional.of(awardConfig)  
  58.                                                 .map(JSONUtil::obj2Json)  
  59.                                                 .map(json -> JSONUtil.json2Obj(json, AwardConfig.class))  
  60.                                                 .orElseGet(AwardConfig::new);  
  61.                                         awardConfigclone.setMoney(  
  62.                                                 Optional.of(clue.getId())  
  63.                                                         .filter(specialId::equals)  
  64.                                                         .map(e -> clueResp.specialReward.longValue())  
  65.                                                         .orElse(clueResp.otherAverageReward.longValue())  
  66.                                         );  
  67.                                         eventActionService.assembleAward(  
  68.                                                 awardConfigclone,  
  69.                                                 clue.getAdviserUid(),  
  70.                                                 clue.getAdviserUid(),  
  71.                                                 clue.getClueUid(),  
  72.                                                 eventAction,  
  73.                                                 new PasMessageParam(),  
  74.                                                 clue.getId(),  
  75.                                                 AwardRelationType.Clud.code()  
  76.                                         );  
  77.                                     })  
  78.                                     .forEach(clue -> {  
  79.                                         clue.setOrderNo(req.orderNo);  
  80.                                         clue.setCommodityName(req.commodityName);  
  81.                                         clue.setOrderAmount(req.orderAmount);  
  82.                                         clue.setReceived(true);  
  83.                                         clue.setModifyTime(now);  
  84.                                         clueMapper.updateByPrimaryKeySelective(clue);  
  85.                                     });  
  86.                         }  
  87.                 ); 

Java 就是這么一門神奇的語言,任何水平的人都能寫出可以運(yùn)行的代碼,但是一看代碼便知水平高低。但是這樣的 Stream 代碼你一定一口老談不吐不快!

八、小編已陣亡

好了,小編實(shí)在整理不下去了,大家有興趣的可以去:

https://gitee.com/oschina/bullshit-codes

更進(jìn)一步的吐槽! 

責(zé)任編輯:龐桂玉 來源: Java后端技術(shù)
相關(guān)推薦

2019-04-09 09:50:34

2014-07-22 14:39:46

手游坑爹AppStore

2021-10-28 06:17:46

架構(gòu)設(shè)計(jì)組件

2011-12-15 09:45:21

PhoneGap

2011-12-22 19:57:38

PhoneGap

2020-05-21 13:45:03

Java坑爹編程語言

2018-01-11 16:30:03

數(shù)據(jù)庫MySQLSQL

2012-05-07 13:52:45

PHP

2021-05-08 09:02:19

Java加載器

2021-01-13 09:14:00

緩存穿透RPC

2012-04-05 09:13:17

C代碼

2011-09-08 17:31:29

Steply社交圖片

2022-03-04 06:46:30

Python代碼

2015-08-25 08:55:14

優(yōu)秀代碼基因

2019-09-10 13:16:23

ARP地址解析協(xié)議局域網(wǎng)

2017-08-29 08:35:01

好技術(shù)淘汰產(chǎn)品

2013-12-23 09:44:43

2012-09-04 09:55:22

代碼抓狂的代碼開發(fā)

2022-12-15 19:27:33

多線程代碼性能

2009-08-14 09:19:15

Windows 7XP模式優(yōu)缺點(diǎn)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)