现在的位置: 首页 > 综合 > 正文

Scala的使用方法

2019年12月23日 综合 ⁄ 共 1290字 ⁄ 字号 评论关闭

避免null使用

  大多数语言都有一个特殊的关键字或者对象来表示一个对象引用的是"无",在Java,它是null。在Java里,null是一个关键字,不是一个对象,所以对它调用任何方法都是非法的。但是这对语言设计者来说是一件令人疑惑的选择。为什么要在程序员希望返回一个对象的时候返回一个关键字呢?

Scala的Option类型

  为了让所有东西都是对象的目标更加一致,也为了遵循函数式编程的习惯,Scala鼓励你在变量和函数返回值可能不会引用任何值的时候使用Option类型。在没有值的时候,使用None,这是Option的一个子类。如果有值可以引用,就使用Some来包含这个值。Some也是Option的子类。None被声明为一个对象,而不是一个类,因为我们只需要它的一个实例。这样,它多少有点像null关键字,但它却是一个实实在在的,有方法的对象。

  应用例子

  Option类型的值通常作为Scala集合类型(List,Map等)操作的返回类型。比如Map的get方法:

  scala>valcapitals=Map("France"->"Paris","Japan"->"Tokyo","China"->"Beijing")

  capitals:scala.collection.immutable.Map[String,String]=Map(France->Paris,Japan->Tokyo,China->Beijing)

  scala>capitalsget"France"

  res0:Option[String]=Some(Paris)

  scala>capitalsget"NorthPole"

  res1:Option[String]=None

  Option有两个子类别,Some和None。当程序回传Some的时候,代表这个函式成功地给了你一个String,而你可以透过get()函数拿到那个String,如果程序返回的是None,则代表没有字符串可以给你。

  在返回None,也就是没有String给你的时候,如果你还硬要调用get()来取得String的话,Scala一样是会抛出一个NoSuchElementException异常给你的。我们也可以选用另外一个方法getOrElse。这个方法在这个Option是Some的实例时返回对应的值,而在是None的实例时返回传入的参数。换句话说,传入getOrElse的参数实际上是默认返回值。

提示

  Scala程序使用Option非常频繁,在Java中使用null来表示空值,代码中很多地方都要添加null关键字检测,不然很容易出现NullPointException。因此Java程序需要关心那些变量可能是null,而这些变量出现null的可能性很低,但一但出现,很难查出为什么出现NullPointerException。Scala的Option类型可以避免这种情况,因此Scala应用推荐使用Option类型来代表一些可选值。使用Option类型,读者一眼就可以看出这种类型的值可能为None。

抱歉!评论已关闭.