毫无疑问,输入输出参数会导致代码混乱,因为它们可能会增加意外/不可预测的副作用.

所以,许多优秀的程序员说:

避免使用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参数?相关推荐

  1. python中函数的可变参数_简单谈谈Python中函数的可变参数

    前言 在Python中定义函数,可以用必选参数.默认参数.可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数.默认参数.可变参数和关键字参数. ...

  2. python中访问命令行参数_如何在Python中访问命令行参数?

    我强烈建议argparsePython 2.7及更高版本随附. 该argparse模块减少了样板代码,并使您的代码更健壮,因为该模块可以处理所有标准用例(包括子命令),为您生成帮助和用法,检查和清理用 ...

  3. 搭建卷积神经网络怎么确定参数_汽车冲压模具中拉延件各参数要怎么确定?本文教你确定方法!...

    一起探讨,一起学习,一起进步.大家的每一次点赞,每一次评论,每一次转发.都是我创作的动力,期待你的加入 确定拉延方向 确定拉延方向是确定拉延方案首先遇到的问题.它不但决定能否拉深出满意的覆盖件来,而且 ...

  4. python函数参数定义_python函数定义中的5种参数

    python函数参数定义 Python函数定义中的5种参数类型: (5 Types of Arguments in Python Function Definition:) default argum ...

  5. java 方法当参数_如何在Java中将函数作为参数传递?

    如何在Java中将函数作为参数传递? 这个问题在这里已有答案: Java Pass方法作为参数                                     14个答案 是否可以将方法作为参 ...

  6. java 不定长参数_简单介绍Java的不定长度参数

    本文版权归作者所有,仅供用来网上学习来用,读者可以收藏,请不要下载到本机和重新发布到其它网站 先看两个简单的例子,来感受一下Java的不定长度参数 第一个例子: public class VariAr ...

  7. java获取web.xml 参数_解析web.xml中在Servlet中获取context-param和init-param内的参数

    web.xml里面可以定义两种参数:1.application范围内的参数,存放在servletcontext中,在web.xml中配置如下: context/param avalible durin ...

  8. java程序员封闭_变态级JAVA程序员面试32问(转)

    第一,谈谈final, finally, finalize的区别. final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 ...

  9. java aes密钥生成_如何在Java(Android)中生成与.Net中相同的AES密钥?

    我需要从.Net WebService提供的salt和密码生成 Java( Android)中的AES密钥.我需要使用与.net生成的密钥相同的密钥和相同的密码和盐(使用Rfc2898DeriveBy ...

  10. java全局变量怎么定义_怎么在java中创建一个自定义的collector

    简介 在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类. 今 ...

最新文章

  1. bit,Byte、KB、MB、GB、TB、PB、EB之间的关系
  2. Measuring Similarity between Clusters (Clusters 之间相似度的测量)【未完待续】
  3. Android之自定义控件一起制作自定义标签
  4. pmp学习资料_南昌如何选择PMP报考条件-海外人才交流协会
  5. 标记化结构初始化语法(C语言)
  6. Github-Hexo-theme-NexT
  7. http / 关于长连接和短链接的理解
  8. TCP/IP详解卷一02
  9. html assign无效,Object.assign的一些用法
  10. python不带颜色的图形_python – 为什么seaborn pairplot中的kde子图中没有显示颜色?...
  11. 微信java 签名验证_JAVA版微信小程序用户数据的签名验证和加解密
  12. 教你轻松计算AOE网关键路径(转)
  13. 拉普拉斯变换学习笔记
  14. 碳中和目标下A股先锋调研:钢铁行业加速碳达峰 多行业影响已现
  15. Unity Shader数学基础 -- Shader入门精要学习(3)
  16. 【网络编程实践--陈硕】2.4.4 procmon 程序的设计实现
  17. 不想被“监控”了?教你一招摆脱广告追踪
  18. 小游戏内测激励视频广告,然而小程序最大的潜力是电商
  19. java批量下载生成zip压缩包
  20. 【Java基础】面向对象(三)

热门文章

  1. zabbix监控平台添加服务(http,nginx,mysql)
  2. Java即时类| hashCode()方法与示例
  3. Java SimpleTimeZone setStartRule()方法与示例
  4. js math.hypot_带有Python示例的math.hypot()方法
  5. 一道题决定去留:为什么synchronized无法禁止指令重排,却能保证有序性?
  6. OCP-052考试题库汇总(58)-CUUG内部解答版
  7. Express + Node 爬取网站数据
  8. 沈阳职业计算机学院宿舍几人间,沈阳工学院宿舍怎么样 住宿条件好不好
  9. chrome html 读写文件路径,Chrome浏览器支持直接读写本地文件了
  10. php连接mysql乱码原因_PHP连接MYSQL出现乱码的原因与解决办法