代码review发现的难以阅读的代码

╰+哭是因爲堅強的太久メ 2024-03-26 23:55 103阅读 0赞

一、前言

现在还有人写运行有空指针的代码吗?今天review了一个组员写的程序,一看就是头大。现在复盘分析一下。

代码片段如下:

  1. List<MSMallDTO> msMallDTOS = BeanUtil.copyToList(mSubMallDTOList, MSMallDTO.class);
  2. List<MSMallDTO> mallDTOS = msMallDTOS.stream().map(msMallDTO -> {
  3. List<MSubMall> mSubMallList = getSMallByGroupName(msMallDTO.getGroupName());
  4. if (mSubMallList != null && mSubMallList.size() > 0){
  5. List<MsubMallVo> mallVoList = mSubMallList.stream().map(mSubMall -> {
  6. MsubMallVo mallVo = new MsubMallVo();
  7. BeanUtil.copyProperties(mSubMall, mallVo);
  8. if (relIds != null && relIds.size() > 0){
  9. if (relIds.contains(mSubMall.getId())) {
  10. mallVo.setCollect(true);
  11. }
  12. }
  13. return mallVo;
  14. }).sorted(Comparator.comparing(MsubMallVo::getAppSort))
  15. .collect(Collectors.toList());
  16. msMallDTO.setAppList(mallVoList);
  17. }
  18. return msMallDTO;
  19. }).sorted(Comparator.comparing(MSMallDTO::getSort)).collect(Collectors.toList());
  20. redisUtils.set(RedisKeys.getSubMallByUserId(userId,EnumType.CollectionType.SUB_MALL.getValue()),
  21. JSON.toJSONString(mallDTOS),
  22. RedisConstants.EXPIRE_TIME);
  23. return mallDTOS;

二、代码分析

第一步: List msMallDTOS = BeanUtil.copyToList(mSubMallDTOList, MSMallDTO.class);

将 mSubMallDTOList复制到MSMallDTO中 返回对象msMallDTOS

第二步:中间那一堆匿名函数实在难以读懂,先一行行看、

List mSubMallList = getSMallByGroupName(msMallDTO.getGroupName());

根据groupName查询mSubMallList列表

然后是判断 mSubMallList 是否为空 if (mSubMallList != null && mSubMallList.size() > 0)

感觉这里有点画蛇添足 mSubMallList != null && mSubMallList.size() > 0

直接用 null != mSubMallList不就行了吗?

第三步,接下来又是一个匿名函数,看着头大

  1. List<MsubMallVo> mallVoList = mSubMallList.stream().map(mSubMall -> {
  2. MsubMallVo mallVo = new MsubMallVo();
  3. BeanUtil.copyProperties(mSubMall, mallVo);
  4. mallVo.setCollect(false);
  5. return mallVo;
  6. }).sorted(Comparator.comparing(MsubMallVo::getAppSort))
  7. .collect(Collectors.toList());
  8. msMallDTO.setAppList(mallVoList);

声明了一个对象

MsubMallVo mallVo = new MsubMallVo();

将mSubMall复制到mallVo,这感觉真的是脱裤子放屁

BeanUtil.copyProperties(mSubMall, mallVo);
设置一下 mallVo属性
mallVo.setCollect(false);

返回mallVo
return mallVo;

然后这段东西是什么?

.sorted(Comparator.comparing(MsubMallVo::getAppSort))
.collect(Collectors.toList());
msMallDTO.setAppList(mallVoList);

艰涩难懂

这个东西又是什么

msMallDTOS.stream().map

两个匿名函数进行嵌套,实在难以阅读。

三、代码总结

1.嵌套太多的代码,后期修改比较难解构

2.阅读很艰涩

3.潜在BUG难以测试

四、代码书写原则

1、代码尽量简短

2、代码结构清晰

3、避免嵌套

4、一个函数应该只做一件事

发表评论

表情:
评论列表 (有 0 条评论,103人围观)

还没有评论,来说两句吧...

相关阅读

    相关 sso代码review1

    1、项目当中不要出现System.out.println(),要用log代替输出。注意事项: 使用log要使用@Slf4j注解, 其输出内容包含程序的运行的运行时间,运行所

    相关 如何做代码Review

    为什么要做代码Review? 提高代码质量,提升自身水平 及早发现潜在缺陷与Bug,,降低事故成本 促进团队内部知识共享,提高团队整体水平 保证项

    相关 Code Review 代码规范

    1.编码常规项 代码是否内存泄漏,是否UI成红色,是否性能低下,是否会形成crash 各种异常逻辑是否处理 代码能够工作么?它有没有实现预期的功能,逻辑是否

    相关 代码Review那些事

    > 本篇推文是以前同事做分享的时候的ppt,这里我整理出来分享给大家 什么是代码Review? 代码review是指在软件开发过程中,通过对源代码进行系统性检查来确认代

    相关 代码Review那些事

    > 本篇推文是以前同事做分享的时候的ppt,这里我整理出来分享给大家 什么是代码Review? 代码review是指在软件开发过程中,通过对源代码进行系统性检查来确认代