坑爹代码 | 你写过的最长的一行代码有多长???

码云Gitee
 码云Gitee
发布于 2019年05月30日
收藏 17

“bad code”的图片搜索结果

你写过的最长的一行代码有多长吗?你为什么要写这么长?是看着帅呢,还是想减少代码行数?

List<OperationPurchaseInfo> purchaseInfoList = sheet.getPurchaseInfoList().stream().filter(purchaseInfo ->
purchaseInfo.getExteriorOperation().getExteriorPart().getExteriorOperationList().stream()
.filter(exteriorOperation -> exteriorOperation.getProcessState().equals(ExteriorOperation.ProcessState.PROCESSING)).count() != 0
//订单明细中工序对应的工件下的其他工序存在加工中,且已发给供应商且供应商不是当前订单供应商时,需要判断
&& (purchaseInfo.getExteriorOperation().getExteriorPart().getTeamwork() == null ||	!purchaseInfo.getExteriorOperation().getExteriorPart().getTeamwork().equals(sheet.getTeamwork()))
).collect(Collectors.toList());

上面这段代码虽然被拆开多行显示,但本质上是一行,一个极其复杂的赋值语句!

这种代码是不是为了让别人看不懂来彰显自己的编码水平呢?

小编觉得 Java Stream API 以及各种函数式编程方法,以及各种语法糖在某种程度让这种糟糕代码越来越多!

那么一起来批判一下这个代码,或者你有什么好的解决方案呢?

到下面链接发表评论,领取奖品:

https://gitee.com/oschina/bullshit-codes/blob/master/java/ShortIsRight.java

码云 6 周年,我们正在征集各种坑爹代码,很多奖品等你来拿

详细的参与方法请看  https://gitee.com/oschina/bullshit-codes

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:坑爹代码 | 你写过的最长的一行代码有多长???
加载中

精彩评论

开源中国首席美狗
这就是链式语法呀,而且这长度,在SQL面前就是个弟弟
你个大胖子
你个大胖子
表示java的stream等链式语句,每一个链式都另起一行,如:
list.stram()
.xxxx()
.xxxx()
.xxxx();

这样像IDEA会提示你每一句写完之后返回类型是啥,没觉得哪不爽啊
锦年
锦年
这么长不判空不会空指针吗
Will_jay
Will_jay
if("a".equals("")==false) {
return true;
}
之渊
之渊
不是长不长的问题,而是 好不好理解的问题

最新评论(56

Antted
Antted
如果stream处理逻辑特别长,建议封装成函数,做到见名知义
cuihao
cuihao
可读性不高;在对性能没有极致要求的情况下(嵌入式系统、军工、航天、精密仪器),代码可读性优先级高于效率
MeiJM
MeiJM
这是我同事写的,已经吐槽过了。问题不在于用的什么技术,什么语法,就是看起来费劲。
这个是修改后的代码
List<OperationPurchaseInfo> purchaseInfoList = sheet.getPurchaseInfoList().stream().filter(purchaseInfo ->{
  ExteriorPart exteriorPart =purchaseInfo.getExteriorOperation().getExteriorPart();
  Teamwork teamwork = exteriorPart.getTeamwork();
  boolean inProcess = exteriorPart.getExteriorOperationList().stream().anyMatch(exteriorOperation -> exteriorOperation.getProcessState().equals(ExteriorOperation.ProcessState.PROCESSING));
  boolean diffSup = teamwork == null || !teamwork.equals(sheet.getTeamwork());
  return inProcess && diffSup;
}).collect(Collectors.toList());

我觉得代码是写给人看的,看着费劲就不是好代码。😂
Piginzooo
Piginzooo
修改后还是看着费劲😆
MeiJM
MeiJM
起码可以调试了😆
初级开发
初级开发
看着还好啊 我可能也喜欢这么写
MeiJM
MeiJM
不好调试,不好改。
凌波尾部
这么改完基本加点注释就可以完全看懂了
MeiJM
MeiJM
😂
九千里
九千里
这debug起来是要有多麻烦...
h00kran
h00kran
有点像LINQ
多一步
多一步
写一个存储过程会好些
沙罗曼蛇
沙罗曼蛇
链式语法可读性差,找问题也不容易
张亦俊
张亦俊
我觉得小编只是换行没换好,代码本身没啥问题。至于stream,你没这玩意,这段代码用双重for循环能搞出2、30行,而且更加读起来更加费劲。
ZiFzzy
ZiFzzy
lambda的用法本质没啥问题,在于上面的方法处理应该抽取方法来提升代码的可读性。
沙发迪
沙发迪
有18cm长
返回顶部
顶部