加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

设计模式 – Scala程序员 – “应该有一个明显的方法吗”或“多

发布时间:2020-12-16 09:22:10 所属栏目:安全 来源:网络整理
导读:我一直在做Java很长时间,大概在6个月前开始Scala.我喜欢这种语言我发现有一件事是有多种方法来做事情.我不知道是因为语言的本质,还是因为它还是年轻而不断演变,成语和最佳做法还没有出现. 令我惊讶的是,我一直都是一个蟒蛇在perl的人: “There should be on
我一直在做Java很长时间,大概在6个月前开始Scala.我喜欢这种语言我发现有一件事是有多种方法来做事情.我不知道是因为语言的本质,还是因为它还是年轻而不断演变,成语和最佳做法还没有出现.

令我惊讶的是,我一直都是一个蟒蛇在perl的人:

“There should be one– and preferably only one –obvious way to do it.”

比我更有意义

“There’s more than one way to do it”.

我有兴趣知道你认为Scala适合这个规模,为什么?

报价:Python PEP20和Perl quote

解决方法

我对Scala的经验是,有不止一种做事的方式,但相对较少的“最好”的做法.图书馆以不同的方式做很多无偿的选择;当这样做时,通常会在一小部分案例中实现额外的表现力或紧凑性或效率.

例如,如果要求一个整数数组,您可能完全是程序性的,它会生成一个尽可能快的代码,而不是一点点笨重 – 但如果这是一个非常时间紧迫的代码,这是解决问题的唯一最佳方法:

val array = Array(1,2,3,4,5)
var sum = 0
var index = 0
while (index < array.length) {
  sum += array(index)
  index += 1
}
sum

同样一般的功能方法在使用原语时速度较慢(这可能会在2.8中更改为@specialized),但是您可以减少乏味:

var sum = 0
Array(1,5).foreach(x => sum += x)
sum

然后,只有这种问题(因为它出现了很多)而设计的一般功能结构略少,如果你想要干净,紧凑的代码,这是“最好的”:

Array(1,5).reduceLeft( _ + _ )

有时候,有非常非常一般的结构来做你想做的事情.在Scala 2.8中,例如:

Array(1,5).sum

所以你得到一个连续的选择,在一般权力,紧凑性,清晰度和速度的权衡.如果您可以假设代码只需要对熟悉Scala的人员可以访问,并且您知道您是否需要绝对最佳的性能,那么很好的选择通常是相当有限的.但是,由于语言和图书馆的表现力,通常有很多可能的,如果不是最好的方式做事情.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读