SCALA 集合框架文档翻译-Introduction

来源:互联网 发布:centos 7 mount yum 编辑:程序博客网 时间:2024/06/05 03:10
简介

Martin Odersky, and Lex Spoon

英文原文:http://docs.scala-lang.org/overviews/collections/introduction.html


        在大多数人看来,新的集合框架是Scala-2.8发布中最重大的变化。Scala中以前就有集合框架(而且,事实上新的集合框架也与其兼容)。但是只有2.8才真正为集合类型提供了一个通用、统一、包罗万象的框架。

        虽然乍一看集合增加的功能很微妙,但是这些变化对你编程风格的影响是深刻的。事实上,通常这是因为你编写程序时会基于一个更高的抽象,就像一个程序的基本构成是整个集合而不是集合中的元素。这种新的编程风格需要慢慢适应。幸运的是,新的scala集合的一些良好的属性有利于对这种新的编程风格的适应。新的集合框架具有易用、简洁、安全、快速和通用的特点。

  • 易用:20至50个方法对于在很少步内解决大多数集合问题已经够用了。没有必要纠结于复杂的循环和递归之中。持久化的集合以及无副作用的操作意味着你不必担心对当前集合的意外损坏。迭代器与集合更新之间的相互干扰已经消除。

  • 简洁:你可以用单个方法达到执行一个甚至多个循环的作用。你可以用轻量级的语法来表达函数操作、轻易地组合函数操作,使得结果看起来就像一个通常的代数表达式。

  • 安全:这个特点的深入理解需要丰富的实际经验。静态类型以及scala集合的功能性质意味着绝大多数你可能犯的错误都能再编译阶段检查出来。这主要是因为:
  1. 集合操作本身使用的非常频繁,因此测试非常充分
  2. 集合错误的使用将输入和输出显示作为函数的参数和结果
  3. 这些显示的输入输出也经过静态类型检查
这些操作的底线是大多数的操作误用都会显示为类型错误。这在第一次尝试运行几百行的程序时是很常见的。

  • 快速:标准库中集合操作都是经过调整和优化的。因此,使用集合通常是很高效的。使用你自己精心调整的数据结构和操作也许能使得优化有所提升,但是你也可能由于你次优的实现导致结果糟糕得多。另外,近来集合已经对多核上的并行操作做了适配。并行集合支持与通常串行集合相同的操作,因此不需要学习新的操作,已有代码也不需要重写。将一个串行集合转化为一个并行集合,只需要调用串行集合的 par 方法。

  • 通用:集合为任意类型提供相同的操作,只要它认为这些操作在该类型上是意义的。因此,你可以通过相对少的操作达到你想要的结果。例如,一个字符串概念上是一个字符串的序列。因此,在scala的集合中,字符串支持所有的顺序类型操作。这对于数组也是一样。

例:下面这行代码说明了scala集合的众多优点。


    val (minors, adults) = people partition (_.age < 18)


        很容易知道这个操作是要做什么:将集合people根据age划分为minors和adults两个集合。因为 partition 方法定义在根集合类型 TraversableLike中,因此这行代码对于people是任意集合类型都是有效的,包括数组。结果 minors 和 adults 集合的类型与 people相同。

        这里的代码比使用一到三个循环来处理传统集合的过程要简洁得多(使用三个循环是由于中间值需要被缓存到其他地方)。一旦你学会了基本的集合词汇,就会发现这样写代码比起显示地使用循环要更加简单和安全。另外, partition 操作是非常快速的;当在运行于多核机器上,并行集合上的 partition 甚至可以更快。(并行集合已经作为 scala-2.9 的一部分发布)

        本文档从用户的角度对 scala 集合类的 API 进行了深入的讨论。本文档将带你浏览 scala 集合框架中定义的所有基础类和方法。
0 0
原创粉丝点击