Scala语言学习笔记一

Scala是一门小众的语言,但是作者因为工作原因要以Spark作为工作中的一个重心,而Spark采用了Scala语言编写,于是萌生了认真学习Scala的念头,在学习Scala中产生了这篇Scala学习笔记,但是Scala发展之快远远超过了作者的想象。也是和Spark的迅速普及离不开关系,因此作者重新整理了Scala学习笔记,加入了Scala新的特性,希望能够对大家有所帮助,因为时间有限,能力有限,有描述不准确的地方欢迎各位指正。

1 基础使用

1.1 Scala解释器安装

首先下载Scala解释器,下载地址:http://www.scala-lang.org/download/ 我这里是mac环境

安装后确保环境变量中可以直接访问到scala ,验证方法是直接执行

$ scala

如果进入scala交互界面则配置正确,否则检查$PATH变量,如果采用了brew安装,可以用

$ brew install scala

来进行安装,我这里采用的版本是Scala-2.11.x版本

1.2 常量使用

scala> 2 * 3 + 4

res0: Int = 10

计算结果会被保存到 res0 当中,可以继续使用res0来进行运算

scala> 0.5 * res0

res1: Double = 5.0

类型支持自动转换,如果手工调用方法可以使用Tab键,这也是scala交互式学习的优势

scala> res1.to[Tab]

Scala的解释过程实际上是把代码转换成字节码,然后由Java虚拟机执行。一般被称作“REPL”

1.3 常量、变量声明

scala> val number = 0

声明之后 number 的值不可改变,一般会用一些有意义的名称来代替 res值来使用

scala> var counter = 1

scala> var counter = 2

使用var可以声明变量

无论常量和变量都可以指定类型

val hello: String = null

val world: Any = “Hello"

1.4 常用类型

Scala支持其中数值类型: Byte、Char、Short、Int、Long、Float、Double ,和Java一样,还支持Boolean

1.5 函数调用方法

函数通过import导入,例如导入数学函数

scala> import scala,math._ //_是Scala的通配符,类似Java的*

1.6 函数参考

http://www.scala-lang.org/api/2.11.8/#package

2 控制结构和函数

2.1 if条件表达式

Scala的if表达式和Java类似,但是Scala的if/else表达式可以跟着值,也可以赋值给变量

scala> val number = if( x > 0 ) 1 else -1

2.2 输入输出

Scala输出可以使用 print() println() printf() , println和print的区别就是会在打印之后增加一个换行符

printf类似C风格。

scala> printf("Hello , %s !\n", "wilson")

输入使用readLine ,可以带一个参数作为提示符

scala> val name = readLine(“Input your name: ”)

2.3 循环

Scala的for循环比较特殊没有c的(i=0;i<10;i++)的方式,但是Scala 有特殊的for 写法

for ( i <- 表达式 )

scala > for ( i <- 1 to 10 )

| j = j + i

还有更高级的写法

scala > for ( i <- 1 to 3; j <- 1 to 3 ) print (( 10 * i + j ) + " " )

// 11 12 13 21 22 23 31 32 33

还可以生成推导式

scala > for ( i <- 1 to 10 ) yield i % 3

//集合 Vector(1, 2, 0, 1, 2, 0, 1, 2, 0, 1)

Scala 还支持while 和 do循环,写法如下:

scala > while ( n > 1 )

| n -= 1

2.4 函数

Scala 除了方法之外还可以支持函数,方法和函数的区别在于,方法可以对对象进行操作,函数不是。java里只能用静态方法来进行模拟。

函数定义举例:def abs(x: Double) = if ( x >=0 ) x else -x

特别注意的是递归函数,必须要指定返回类型,否则编译器无法校验

def fac(n: Int): Int = if ( n <= 0 ) 1 else n * fac(n - 1)

原文发布于微信公众号 - 奇点(qddata)

原文发表时间:2016-06-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

让你比95%的人更懂Pythonic的内置模块:collections

Python的集合(collections)模块,为很多用其他方法很难实现的场景提供了解决方案。 本文我们将会学习该模块的抽象概念是如何产生的,日后处理不同问题...

1975
来自专栏编程

Python精华之函数

各位小伙伴,大家周一快乐! 不知道刚刚过去的周末大家过的怎么样? 反正常老师是被糊里糊涂的过了个圣诞节 满大街的商场和超市都张灯结彩,话说,不是有规定不让过这种...

2075
来自专栏Java面试通关手册

最最最常见的Java面试题总结——第二周

String类中使用字符数组:private final char value[]保存字符串,所以String对象是不可变的。StringBuilder与Str...

1172
来自专栏小樱的经验随笔

数据结构学习笔记【持续更新】

数据结构概述:   定义:     我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到保存到主存储器(内存)中,     以及在此基础上为实...

2283
来自专栏web前端教室

浅谈数据结构 - 字典

浅淡,真的是很浅。Orz.. 先摆出定义,这里的字典是啥样的? 是以键-值对形式保存数据的一种结构。 现实中比较典型的例子,就是以前的电话本。你想找一个单位的电...

19610
来自专栏IT派

JavaScript 打怪升级 —— 把业务逻辑当练习题做

开发项目和出没社区有一段时间了,会遇上一些比较有印象业务需求。这些业务需求,可能是自己开发项目遇上的,可能是在社区看到的业务需求,或者其他情况接触到的需求,但是...

813
来自专栏C/C++基础

C++嵌套类与局部类

定义嵌套类的初衷是建立仅供某个类的成员函数使用的类类型。目的在于隐藏类名,减少全局的标识符,从而限制用户能否使用该类建立对象。这样可以提高类的抽象能力,并且强调...

831
来自专栏编程

Python函数之匿名函数

各位小伙伴,周五快乐! 今天是2017年最后一个工作日,大家都在忙碌些什么呢? 今天我们要讲的是Python函数中的匿名函数 好像函数中的分类及说法很多,但是大...

2096
来自专栏owent

再议 C++ 11 Lambda表达式

C++ 11 标准发布,各大编译器都开始支持里面的各种新特性,其中一项比较有意思的就是lambda表达式。

1062
来自专栏Modeng的专栏

Javascript数组系列一之栈与队列

所谓数组(英语:Array),是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。 组成数组的各个变量称为数组的分量,也称为数组的元素...

1395

扫码关注云+社区

领取腾讯云代金券