Java 从 for循环的 continue 和 break 使用 ,浅聊一些敲代码的思考

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

前言


最近有在review 一些项目代码 

有的是兄弟们十万火急求救的时候帮忙看到的
有的是一些老项目代码翻阅的时候看到的。

看到了些什么

看到了一些 ‘没有问题的代码’ 。

纠结了那么一下我决定还是把一些东西拎出来 聊聊。

当然了我的对一些代码写法或者问题的思考不一定是非常好的但我想也算是对一些小伙伴有一定的帮助的。

正文

怎么个事

ps: 从这一刻起我需要看官们认真耐心地看。 可能比较啰嗦但是我这个习惯目前难改。

我用一个业务案例来 说说 是这么个事。


比如 有个业务需求是 需要知道这个人  这次整体的考核结果 是否通过。 

一次整体的考核里面涉及到 多场考试会有对应的结果记录。

考试结果记录 ExamRecord

需求描述


考核结果 的 通过条件是


 全部考试记录里面 
 
 ①如果考试记录中 考试类型 不是 1的 不参与做考核验证

 ②如果考试记录中考试结果 hasPassed 不是 true的 不参与做考核验证


 ③然后至少需要有 一场考试记录考试类型type 是 1  而且 考试结果 hasPassed 是true  。
 
 符合上述条件的 才能算通过。

上面的需求场景描述 你们看有没有问题

① ② 这两点其实仅仅是帮助理解

针对当前需求如果从研发逻辑的角度去看  有意义没 

这个我不说结论暂且打住继续往下看。


接下来我会 复现出 一些 小伙伴 可能会写出来的  ‘没有问题的代码’  。

暂且模拟一下 我们查出来的一个考核的 考试结果记录list 数据  

其实这个没有什么仅仅为了说是让案例更加真实一点。

 

 ‘没有问题的代码’ ① 

    public Boolean doExamFinalProof(List<ExamRecord> examRecords) {
        for (ExamRecord examRecord : examRecords) {
            if (1 != examRecord.getType()) {
                continue;
            }
            if (!examRecord.getHasPassed()) {
                continue;
            }
            return true;
        }
        return false;
    }

可以看到 这段代码的思路

遍历 这个考试结果记录集合 

然后 如果考试类型 不等于 1   continue

 然后 如果考试结果 不是 true   continue

continue  在for循环里面的作用是继续下一波的。

 

这样写其实对于实现目前这个需求是OK的。 

但是大家有没有觉得写得看起来有那么一些怪

嗯也许是 continue  的 魔力 咱们继续看。

 ‘没有问题的代码’ ② 

 

    public Boolean doExamFinalProof2(List<ExamRecord> examRecords) {

        Boolean result = false;

        for (ExamRecord examRecord : examRecords) {
            if (1 != examRecord.getType()) {
                continue;
            }
            if (examRecord.getHasPassed()) {
                result = true;
                break;
            }

        }
        return result;
    }

这代码里面用到了 continue 和· break  。

看看这个代码的思路 

 

这样写其实对于实现目前这个需求是OK的。 

但是大家有没有还是觉得 有那么一些怪

嗯也许是  continue 和· break  的 魔力 咱们继续看。

 ‘没有问题的代码’ ③ 

    public Boolean doExamFinalProof3(List<ExamRecord> examRecords) {

        for (ExamRecord examRecord : examRecords) {
            if (1 != examRecord.getType()) {
                continue;
            }
            if (examRecord.getHasPassed()) {
                return true;
            }
        }
        return false;
    }

看看这个代码的思路

 

这么写也OK吧 是的 OK的。

咱们继续看。

代码 ④

    public Boolean doExamFinalProof4(List<ExamRecord> examRecords) {

        for (ExamRecord examRecord : examRecords) {
            if (1 == examRecord.getType() && examRecord.getHasPassed()) {
                return true;
            }
        }
        return false;
    }

看看代码思路

 

好了该篇就到这吧。


小陈问 路人象牙塔 怎么走。

 

路人说有3条路。

但是如果你走的时候遇到了山你 一定要停止返回重新选择其他路

如果你走的时候遇到了江你一定要停止返回重新选择其他路

如果你走的时候遇到了猛兽你也一定要停止返回重新选择其他路。

小陈问那么你知道那条路是 没山没江没猛兽的吗?  如果你知道麻烦告诉一下我感谢。

路人说 噢是知道的你往这边直走就行。

谢谢、

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Java