干参数名称

您多久会看到这样的代码,特别是在使用依赖注入,单一职责原则和其他“良好实践”时?

class FriendsTimelineReader(userFinder: UserFinder,
   userStatusReader: UserStatusReader,
   statusSecurityFilter: StatusSecurityFilter) {
   ...
}

请注意,参数名称是类名称的精确副本 。 那当然不是干的

在Java中,编写此类代码比在Scala中要容易一些,因为您首先编写类型,然后可以自动完成变量名(IDE中存在自动完成的事实表明这是一种常见的模式)。 在Scala中,有更多的类型输入,但是围绕声明字段/定义构造函数/分配给字段的样板更少。

如何避免呢? 我们总是可以使用晦涩的变量名,如“ ssf ”,而不是“的statusSecurityFilter “。 但是,拥有一个很好命名的类以使代码可读的整个工作(这是一项艰巨的任务)变得浪费了。

当然,变量名非常有用,例如,当我们必须区分我们的方法采用的10个String参数,创建一个Int计数器等时。但是,我们使用专用包装类型的次数越来越多(现在可能更多,使用Scala 2.10引入了值类 ),以使我们的代码更加类型安全,我们的服务越细腻–变量/参数名称越经常反映类名称。

即使有几个类的实例,参数名称也经常包含一些限定符 +类名称(例如给定的Person类, personAssociator.createFriends( firstPerson , secondPerson ) )。 有趣的是,可以看到一些有关变量名多长时间是类名或后缀的镜像的统计信息-我怀疑它可能占很大的百分比。

也许下一步安全性是在命名参数时限制完全自由吗? 甚至在某些情况下甚至完全不需要参数名称。

例如。 从一开始的片段中,我们只想获取UserFinder “实例”。 在系统中,最有可能只有该类的一个实例,并且肯定会一次被其他类使用。 那么,为什么不让类表达它想要一个类的实例而不必命名呢? 让我们使用不定冠词 “ a”作为关键字(我们实际上并不关心传递哪个实例):

class FriendsTimelineReader(a UserFinder,
  a UserStatusReader,
  a StatusSecurityFilter)

现在,您将如何在类中使用此类变量? 让我们使用定冠词“ the”-赋予该类的实例,例如:

val user10 = (the UserFinder).findById(10)

也许这看起来有点像科幻小说,但是不方便吗? 也许这个问题已经通过其他语言的某些机制解决了?

亚当

编辑27/01/2013 :将以上内容扩展为处理预选赛:

class Friends(a 'first Person, a 'second Person) {
   ...
   (the 'first Person).getName()
   ...
}

参考: Adam Warski博客的Blog中来自我们的JCG合作伙伴 Adam Warski的干燥参数名称

翻译自: https://www.javacodegeeks.com/2013/01/dry-parameter-names.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值