攻击您的输入

虽然我一直反对用Java用final来绘制所有代码 ,并且已经接受了在JavaScript中使用const的方便,因为它通常会迫使某些纪律成为免费代码,但是有一个潜在的规则可以使我想要到处都有更多的常量。

规则是一个函数应该返回一些东西 。 通过将所有变量视为不可变常量(包括函数的输入),可以在一定程度上实施此操作。 通过这种支持线程安全功能编程的方法,从结构上讲,您不太可能出现错误。

但是,有一些关于使用constfinal解决此问题的警告。

  • 有时,要求一个函数将其结果累加到一个现有的容器中(例如数组或映射)是很合理的,因为使用克隆方法来使一个新的容器返回很麻烦
  • 设置引用常量并不能保证不变性,因此您似乎很认真地使用常量关键字,但是仍然违反了一般原则

为什么函数应该返回某些东西

如果一个函数仅对其一个输入进行操作并返回一个值,则:

  • 它可能有一个责任
  • 非常容易测试
  • 更容易理解

相反,如果函数执行各种操作,也许在一连串的调用中转发到下一个,则很难理解,调试和测试……可能更难正确。 这样做可能还会浪费内存

攻击输入

尽管有这样的想法,我们可能(偶尔)将一个对象传递给一个函数,以便将值累加到其中。 我们应该研究如何避免修改输入参数。

  • 不要重新定义输入参数 -如果您需要对输入为第一个参数的对象进行迭代,请使用迭代来跟踪电流,而不是在循环中重写输入变量
  • 不要更改输入内容,因为这意味着您与呼叫者之间存在反向关系,后者可能天真的认为他们可以重复使用输入内容,但是不能-在某些情况下这是不可避免的,但是这些情况应该清楚地标明并且很少

一般规则是, 您可以控制输入对象的状态这是一个特殊的假设

在最近的示例中,调用函数在列表上使用迭代器,而调用的函数同时接收当前项和迭代器。 该子例程正在从迭代器中删除项目以及使用当前项目。

尽管看起来可以,但我们无法向自己解释该算法为何起作用。

摘要

简短,可测试,单一职责,可测试的功能会明智地使用其输入。

翻译自: https://www.javacodegeeks.com/2020/02/attacking-your-inputs.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值