java in out 参数_总是避免Java中的in-out参数?
毫无疑问,输入输出参数会导致代码混乱,因为它们可能会增加意外/不可预测的副作用.
所以,许多优秀的程序员说:
避免使用in-out参数来更改可变方法参数.希望保持参数不变.
对于一个完美主义程序员来说,他希望他的代码是最干净和最容易理解的,那么这个"规则"是否必须适用于所有情况?
例如,假设一种将元素添加到简单列表的基本方法,有两种方法:
第一种方式(带有输入参数):
private void addElementsToExistingList(List myList){
myList.add("Foo");
myList.add("Bar");
}
并且来电者是:
List myList = new ArrayList();
//.......Several Instructions (or not) .....
addElementsToExistingList(myList);
没有参数的第二种方式:
private List addElementsToExistingList(List originalList){
List filledList = new ArrayList(originalList); //add existing elements
filledList.add("Foo");
filledList.add("Bar");
return filledList;
}
并且来电者是:
List myList = new ArrayList();
//.......Several Instructions (or not) .....
myList.addAll(addElementsToExistingList(myList));
第二种方式的优点:
参数未被修改=>没有新代码阅读器出现意外副作用的风险.
第二种方式:
非常冗长,可读性很差......
当然,你会告诉我,对于像这个简单的代码,第一种方法真的更方便.
但是,如果我们不考虑任何概念/代码的难度,那么对于任何读者(无论是否为初学者),我都认为第二种方式更具逻辑性和显而易见性.
然而,它违反了CQS原则,该原则认为"命令"方法具有具有潜在的空白返回(但是因为它是惯例而允许)副作用和具有返回类型且没有副作用的"查询"方法.
那么,激励程序员采用什么呢?两个混合代码案例?或者保持"法律"期望始终避免进出参数......
(当然,添加Element的方法被命名用于表示示例,并且在实际代码中将是一个错误的名称选择).
java in out 参数_总是避免Java中的in-out参数?相关推荐
- python中函数的可变参数_简单谈谈Python中函数的可变参数
前言 在Python中定义函数,可以用必选参数.默认参数.可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数.默认参数.可变参数和关键字参数. ...
- python中访问命令行参数_如何在Python中访问命令行参数?
我强烈建议argparsePython 2.7及更高版本随附. 该argparse模块减少了样板代码,并使您的代码更健壮,因为该模块可以处理所有标准用例(包括子命令),为您生成帮助和用法,检查和清理用 ...
- 搭建卷积神经网络怎么确定参数_汽车冲压模具中拉延件各参数要怎么确定?本文教你确定方法!...
一起探讨,一起学习,一起进步.大家的每一次点赞,每一次评论,每一次转发.都是我创作的动力,期待你的加入 确定拉延方向 确定拉延方向是确定拉延方案首先遇到的问题.它不但决定能否拉深出满意的覆盖件来,而且 ...
- python函数参数定义_python函数定义中的5种参数
python函数参数定义 Python函数定义中的5种参数类型: (5 Types of Arguments in Python Function Definition:) default argum ...
- java 方法当参数_如何在Java中将函数作为参数传递?
如何在Java中将函数作为参数传递? 这个问题在这里已有答案: Java Pass方法作为参数 14个答案 是否可以将方法作为参 ...
- java 不定长参数_简单介绍Java的不定长度参数
本文版权归作者所有,仅供用来网上学习来用,读者可以收藏,请不要下载到本机和重新发布到其它网站 先看两个简单的例子,来感受一下Java的不定长度参数 第一个例子: public class VariAr ...
- java获取web.xml 参数_解析web.xml中在Servlet中获取context-param和init-param内的参数
web.xml里面可以定义两种参数:1.application范围内的参数,存放在servletcontext中,在web.xml中配置如下: context/param avalible durin ...
- java程序员封闭_变态级JAVA程序员面试32问(转)
第一,谈谈final, finally, finalize的区别. final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 ...
- java aes密钥生成_如何在Java(Android)中生成与.Net中相同的AES密钥?
我需要从.Net WebService提供的salt和密码生成 Java( Android)中的AES密钥.我需要使用与.net生成的密钥相同的密钥和相同的密码和盐(使用Rfc2898DeriveBy ...
- java全局变量怎么定义_怎么在java中创建一个自定义的collector
简介 在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类. 今 ...
最新文章
- bit,Byte、KB、MB、GB、TB、PB、EB之间的关系
- Measuring Similarity between Clusters (Clusters 之间相似度的测量)【未完待续】
- Android之自定义控件一起制作自定义标签
- pmp学习资料_南昌如何选择PMP报考条件-海外人才交流协会
- 标记化结构初始化语法(C语言)
- Github-Hexo-theme-NexT
- http / 关于长连接和短链接的理解
- TCP/IP详解卷一02
- html assign无效,Object.assign的一些用法
- python不带颜色的图形_python – 为什么seaborn pairplot中的kde子图中没有显示颜色?...
- 微信java 签名验证_JAVA版微信小程序用户数据的签名验证和加解密
- 教你轻松计算AOE网关键路径(转)
- 拉普拉斯变换学习笔记
- 碳中和目标下A股先锋调研:钢铁行业加速碳达峰 多行业影响已现
- Unity Shader数学基础 -- Shader入门精要学习(3)
- 【网络编程实践--陈硕】2.4.4 procmon 程序的设计实现
- 不想被“监控”了?教你一招摆脱广告追踪
- 小游戏内测激励视频广告,然而小程序最大的潜力是电商
- java批量下载生成zip压缩包
- 【Java基础】面向对象(三)
热门文章
- zabbix监控平台添加服务(http,nginx,mysql)
- Java即时类| hashCode()方法与示例
- Java SimpleTimeZone setStartRule()方法与示例
- js math.hypot_带有Python示例的math.hypot()方法
- 一道题决定去留:为什么synchronized无法禁止指令重排,却能保证有序性?
- OCP-052考试题库汇总(58)-CUUG内部解答版
- Express + Node 爬取网站数据
- 沈阳职业计算机学院宿舍几人间,沈阳工学院宿舍怎么样 住宿条件好不好
- chrome html 读写文件路径,Chrome浏览器支持直接读写本地文件了
- php连接mysql乱码原因_PHP连接MYSQL出现乱码的原因与解决办法