局部变量,在使用时再定义

关于局部变量,适时定义局部变量,可提高代码清晰度和可读性,并能规避不必要的代码bug

局部变量,在使用时再定义,提高代码可读性

下面代码中的2个方法,第1个 verifyTaskApply  调用第2个 existAppliedTask 。 请问,在 existAppliedTask  中调用 taskApplyService.getUserTaskApply 时, checkTaskApplyDTO 有哪些属性值?

private void verifyTaskApply(OrderDetailVO detail,List<UserSignVO> signedList) {log.info("收款人任务领取单校验,detailVO:{}", detail);if (detail == null || StringUtils.isBlank(detail.getUserIdcardNo()) ||detail.getTaskId() == null || detail.getProviderId() == null ||detail.getEnterpriseId() == null) {log.error("收款人任务领取单校验,参数错误,detailVO:{}", detail);throw new VerifyException(VerifyStatusResult.failedWithMessage("收款人任务领取单校验,参数错误"));}if (CollectionUtils.isEmpty(signedList)) {throw new VerifyException(VerifyStatusResult.failedWithMessage("签约记录未获取到"));}CheckTaskApplyDTO checkTaskApplyDTO = new CheckTaskApplyDTO();checkTaskApplyDTO.setProviderId(detail.getProviderId());checkTaskApplyDTO.setTaskId(detail.getTaskId());checkTaskApplyDTO.setEnterpriseId(detail.getEnterpriseId());checkTaskApplyDTO.setProductEnum(ProductEnum.BossKG);boolean exists = existAppliedTask(detail, checkTaskApplyDTO,signedList);if (!exists) {throw new VerifyException(VerifyStatusResult.failedWithMessage("收款人未领取任务"));}
}
private boolean existAppliedTask(OrderDetailVO detail, CheckTaskApplyDTO checkTaskApplyDTO, List<UserSignVO> signedList){for (UserSignVO signVO : signedList) {detail.setUserId(signVO.getUserId());detail.setUserSignBankCard(signVO.getUserBankCard());checkTaskApplyDTO.setUserId(signVO.getUserId());ResultX<TaskApplyVO> result = taskApplyService.getUserTaskApply(checkTaskApplyDTO);if (!result.isSuccess() || result.getResult() == null) {log.warn("收款人任务领取单校验,未领取任务,taskApplyQuery:{}", checkTaskApplyDTO);continue;}TaskApplyVO taskApplyVO =  result.getResult();detail.setTaskApplyId(taskApplyVO.getApplyId());detail.setSignId(signVO.getSignId());if (TaskApplyStatusEnum.TASKAPPLY_PASS == TaskApplyStatusEnum.getBean(taskApplyVO.getApplyStatus())) {return true;}log.warn("收款人任务领取单校验,收款人任务领取单未领取,taskApplyQuery:{}", checkTaskApplyDTO);}return false;
}

有没有一种可能,你认为checkTaskApplyDTO只给了一个 userId属性值?

如果有,如何消除这种“可能的认为”呢?

so easy!下面隐藏的代码,告诉你答案。

private void verifyTaskApply(OrderDetailVO detail,List<UserSignVO> signedList) {...boolean exists = existAppliedTask(detail, signedList);...
}
private boolean existAppliedTask(OrderDetailVO detail, List<UserSignVO> signedList){CheckTaskApplyDTO checkTaskApplyDTO = new CheckTaskApplyDTO();checkTaskApplyDTO.setProviderId(detail.getProviderId());checkTaskApplyDTO.setTaskId(detail.getTaskId());checkTaskApplyDTO.setEnterpriseId(detail.getEnterpriseId());checkTaskApplyDTO.setProductEnum(ProductEnum.BossKG);for (UserSignVO signVO : signedList) {detail.setUserId(signVO.getUserId());detail.setUserSignBankCard(signVO.getUserBankCard());checkTaskApplyDTO.setUserId(signVO.getUserId());ResultX<TaskApplyVO> result = taskApplyService.getUserTaskApply(checkTaskApplyDTO);if (!result.isSuccess() || result.getResult() == null) {log.warn("收款人任务领取单校验,未领取任务,taskApplyQuery:{}", checkTaskApplyDTO);continue;}...}return false;
}

是否依然有一种可能,你认为checkTaskApplyDTO只给了一个 userId属性值?

如果有,如何消除这种“可能”呢?

so easy!下面隐藏的代码,告诉你答案。

private void verifyTaskApply(OrderDetailVO detail,List<UserSignVO> signedList) {...
}
private boolean existAppliedTask(OrderDetailVO detail, List<UserSignVO> signedList){    for (UserSignVO signVO : signedList) {detail.setUserId(signVO.getUserId());detail.setUserSignBankCard(signVO.getUserBankCard());CheckTaskApplyDTO checkTaskApplyDTO = new CheckTaskApplyDTO();checkTaskApplyDTO.setProviderId(detail.getProviderId());checkTaskApplyDTO.setTaskId(detail.getTaskId());checkTaskApplyDTO.setEnterpriseId(detail.getEnterpriseId());checkTaskApplyDTO.setProductEnum(ProductEnum.BossKG);checkTaskApplyDTO.setUserId(signVO.getUserId());ResultX<TaskApplyVO> result = taskApplyService.getUserTaskApply(checkTaskApplyDTO);if (!result.isSuccess() || result.getResult() == null) {log.warn("收款人任务领取单校验,未领取任务,taskApplyQuery:{}", checkTaskApplyDTO);continue;}...}return false;
}

局部变量,在使用时再定义,规避bug

下图,再一次证明 “变量在使用时再定义” 这句话的正确性。

方法的开头定义了 ret 变量,从这个方法的逻辑,不难看出,这个 ret 是方法的返回值。 而在后面打印日志时,开发者不慎,误将 cardBinDTO 敲成了 ret ,显然,这是一个失误!

如果将 ret 变量的定义延后到 return 语句那块的话,就完全可以规避这个问题。

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/51492.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20240730 每日AI必读资讯

&#x1f3ac;燃爆&#xff01;奥运8分钟AI影片火了&#xff0c;巴赫主席&#xff1a;感谢中国黑科技 - 短片名为《永不失色的她》&#xff08;To the Greatness of HER&#xff09;&#xff0c;由阿里巴巴和国际奥委会联合推出。 - 百年奥运史上伟大女性的影响故事在此被浓缩…

Rust语言入门第七篇-控制流

文章目录 Rust语言入门第七篇-控制流If 表达式基本结构特点和规则示例 let 语句中使用 ifloop 循环基本结构特点示例综合示例 while 循环基本结构特点示例综合示例 与 loop 循环的区别 for 循环基本结构详细说明特点示例综合示例 Rust语言入门第七篇-控制流 Rust 的控制流是指…

Oracle Database 23.5 - for Engineered Systems版本发布

要尝鲜的可以在https://edelivery.oracle.com/下载。对于x86的本地版本再等等吧。 安装可参考飞总的&#xff1a;oracle 23ai&#xff08;23.5.0.24.07&#xff09;完整功能版安装体验 – 提供7*24专业数据库(Oracle,SQL Server,MySQL,PostgreSQL等)恢复和技术支持Tel:1781323…

Python数值计算(12)

本篇说说Neville方法。Neville方法的基础是&#xff0c;插值多项式可以递归的生成&#xff0c;有时进行插值的目的是为了计算某个点的值&#xff0c;这个时候并不需要将拟合曲线完全求出&#xff0c;而是可以通过递归的方式进行计算&#xff0c;具体操作如下&#xff1a; 例如…

OpenGL学习 1

一些唠叨&#xff1a; 很多时候&#xff0c;都被Live2d吸引&#xff0c;去年想给网页加个live2d看板娘&#xff0c;结果看不懂live2d官方给的SDK&#xff0c;放弃了。今天又想弄个live2d桌宠&#xff0c;都已经在网上找到Python 的 Live2D 拓展库了&#xff0c;并提供了用QT实现…

可能是目前最全面的前端提测/自测标准

产品、测试总是抱怨你的开发质量太差&#xff0c;怎么办&#xff1f; 前端开发的质量直接影响用户体验。无论是一个简单的静态页面&#xff0c;还是复杂的动态应用&#xff0c;都需要经过严格的测试流程才能保证上线后的稳定和流畅。 这里整理了一份前端自测标准&#xff0c;…

【算法模板】数论:裴蜀定理

概念 裴蜀定理&#xff08;Bzout’s Identity&#xff09;是数论中的一个重要定理&#xff0c;涉及整数的线性组合。定理陈述如下&#xff1a; 对于任何整数 a 和 b&#xff0c;如果 d 是 a 和 b 的最大公约数&#xff0c;那么存在整数 x 和 y 使得&#xff1a; axbyd 换句话…

昇思25天学习打卡营第19天|ResNet50 图像分类案例:数据集、训练与预测可视化

目录 环境配置 数据集加载 数据集可视化 Building Block Bottleneck 构建ResNet50网络 模型训练与评估 可视化模型预测 环境配置 首先指出实验环境预装的 mindspore 版本以及更换版本的方法。然后&#xff0c;它卸载了已安装的 mindspore 并重新安装指定的 2.3.0rc1 版本…

值得买科技与MiniMax达成官方合作伙伴关系,共建融合生态

7月29日&#xff0c;值得买科技与大模型公司MiniMax宣布达成官方合作伙伴关系。 MiniMax旗下大模型产品海螺AI现已接入值得买“消费大模型增强工具集”&#xff0c;基于海螺AI比价策略&#xff0c;用户可通过海螺AI“悬浮球”功能实现快速比价及跳转购买。 此次合作也标志着值…

4.仓颉编程_使用Console.stdIn.read()实现c语言的控制台scanf或getchar()的读取输入字符功能

使用Console.stdIn.readln()实现c语言的控制台scanf或getchar()的读取输入字符功能 try catch捕捉异常 import std.console.*main() {println("请输入字符. 按q退出:")try {//读取一个字符var ch2 Console.stdIn.read().getOrThrow()//判断输入的是否是字符q,如果…

Day.32 | 518.零钱兑换 II 377.组合总和 Ⅳ

518.零钱兑换 II 要点&#xff1a;先遍历数组&#xff0c;后遍历背包&#xff0c;求的是组合数 class Solution { public:int change(int amount, vector<int>& coins) {vector<int> dp(amount 1, 0);dp[0] 1;for (int i 0; i < coins.size(); i) {for…

docker compose 和 docker-compose 两个命令等价吗

docker compose 和 docker-compose 这两个命令虽然看起来很相似,但实际上有一些重要的区别: 实现方式不同: docker-compose 是用 Python 编写的独立工具[2][4]。docker compose 是用 Go 语言重写的,作为 Docker CLI 的一个插件[1][4]。 集成度不同: docker compose 作为 Docke…

Window 下 Vim 环境安装踩坑问题汇总及解决方法

导航 Linux 下Mamba 及 Vim 安装问题参看本人之前博客&#xff1a;Mamba 环境安装踩坑问题汇总及解决方法Linux 下Vmamba 安装教程参看本人之前博客&#xff1a;Vmamba 安装教程&#xff08;无需更改base环境中的cuda版本&#xff09;Windows 下 VMamba的安装参看本人之前博客…

操作系统重点总结

文章目录 1. 操作系统重点总结1.1 操作系统简介1.1.1 操作系统的概念和功能1.1.2 操作系统的特征1.1.2.1 并发1.1.2.2 共享1.1.2.3 虚拟1.1.2.4 异步 1.1.3 操作系统的发展与分类1.1.4 中断和异常1.1.5 系统调用1.1.6 操作系统的体系结构1.1.7 操作系统简介总结 1.2 进程1.2.1 …

使用YApi平台来管理接口

快速上手 进入YApi官网&#xff0c;进行注册登录https://yapi.pro/添加项目 3. 添加分类 4. 添加接口 5. 添加参数 添加返回数据 可以添加期望 验证 YAPI&#xff08;Yet Another Practice Interface&#xff09;是一个现代化的接口管理平台&#xff0c;由淘宝团队…

【Python Tips】使用func_timeout库实现os.system()命令行的超时报错检测

一、引言 有时候在python项目代码中使用 os.system() 使用命令行调用外部程序或者函数时&#xff0c;由于我们不知道外部程序会不会因为一些未知原因崩掉&#xff0c;但我们又不想项目代码因此中断&#xff0c;因此&#xff0c;我们可以使用已有的func_timeout库来实现超时检测…

Python性能优化:代码加速与内存管理技巧

在Python编程中&#xff0c;性能优化往往是一个重要但常被忽视的话题。尽管Python以其简洁易读的语法和强大的标准库赢得了广泛的开发者基础&#xff0c;但在处理大规模数据或高性能要求的应用时&#xff0c;其解释执行和动态类型系统的特性可能会成为性能瓶颈。本文将探讨一系…

企业邮箱如何进行邮件监控

企业邮箱监控保障资产安全、合规性&#xff0c;防范网络攻击&#xff0c;提升员工行为。核心要素包括内容扫描、行为分析、合规性检查等。实施策略涉及技术选择、政策制定、员工培训。企业邮箱如何进行邮件监控呢&#xff1f;Zoho邮箱的eDiscovery功能可实现长期邮件保存和监控…

基于百度paddle检索系统的召回

所谓召回&#xff0c;无非就是用一段不规则文本模拟用户query查询&#xff0c;而要召回的是标准的titlekey,这些是要构建索引库的&#xff0c;所有相似文本对的第二个文本必须要在索引库里存在&#xff0c;不然就没法评估,因为标记都是0,还有召回1&#xff0c;召回5等,并不是什…

在Ubuntu 22 VPS服务器上更改phpMyadmin端口的方法

更改 Ubuntu 22 VPS服务器上的 phpMyAdmin 端口可以增强安全性和可管理性。但是具体应该怎么操作呢&#xff1f;接下来将带您了解在Ubuntu 22 VPS 服务器上更改phpMyadmin的端口全过程&#xff0c;一起来看看吧。 准备你的环境 在开始之前&#xff0c;让我们先确保你已做好一…