前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scala学习(一)Scala特性解析

Scala学习(一)Scala特性解析

作者头像
张凝可
发布2019-08-22 10:52:49
9540
发布2019-08-22 10:52:49
举报
文章被收录于专栏:技术圈

在很多地方Scala都很像Java,但是比Java更为函数式编程,这句话主要从三句话就可以理解“一切都是对象”,“一切都是函数”以及“一切都是表达式”三方面理解。

首先是一切都是对象,这大概和Python很像,因为即便是数字1都有一系列的方法,所以我们可以调用1.toDouble将Int类型的1转换为Double类型的1。

然后是一切都是函数,表现为可以重载操作符,Python很像,在一定程度上我总觉的Scala是Java和Python生的孩子,只不过遗传基因比较大的卵子是Java提供的,而比较小的那颗精子则是Python提供的。

最后是一切都是表达式,if(){}else{}这样的语句块是有返回值的。

代码语言:javascript
复制
val x = if(a>3)"true"else"false"

所以x的值根据a的大小要么是"true"要么为"false"

在了解了Scala三种特性后正式开启

Scala的类结构

Scala的集合

Scala的集合系统地区分为不可变集合和可变集合。顾名思义,可变集合可以进行修改/删除/增加/,而不可变集合是永久都不会变的,但是并不意味着不可以进行增删改的操作,只不过每一个试图改变不可变集合的后果都是返回一个新的集合。

不可变集合

Scala的可变集合

Scala容器和Java容器的互换

Scala的容器可以在转换为Java容器,只要import scala.collection.JavaConverters._,比如Java中的ArrayList是没有map,filter操作的,但是只要导入了这个包,就可以进行隐式的转换,Java中的集合也可以调用Scala集合中的方法。

Scala中的Try对象

Scala中的Try对象的作用等同与Java中的Try{}catch(){}finally{}结构

Try类有Sucess和Failure两个子类,将有可能会出现异常的代码传入Try类的构造器中,若执行成功则为Sucess则返回正确值,反之为Failure,存储失败的异常,当然可以通过方法来控制失败时的默认值。比如将一个字符串转换为整型,可能会出现不能转换的异常。但是我们可以通过getOrElse方法设定Failure时的默认值。

代码语言:javascript
复制
val a = Try("123".toInt).getOrElse(0)

Scala中的Option对象

Option 对象存在的意义在于处理引用变量没有引用任何对象的情况,其实就是空指针的情况。

Java中出现空指针时出现最多的异常就是NullPointerException,Scala为了避免这种情况,将Null进行抽象,封装为了Option对象,Option对象有两个子类,Some代表有值,而None代表没值,比如在map中我们试图获得一个不存在的Key的Value值,Java会报异常,所以在取值时我们需要判断一下是否存在这个Key值,然后再决定是否取,而在Scala中,则不需要这么麻烦,直接调用get方法成功返回的则是Some,失败则是None.具体写法如下:

代码语言:javascript
复制
val value = map.get(key) match {
     case Some(i) => i
     case None => default
}

同样地,也可以通过getOrElse()来设定在结果为None时默认的返回值。

Option其实也是集合的一种,可以进行迭代,因此可以通过模式匹配或者是foreach来获得Option的值

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年03月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档