scala很多人都没有听说过,但是spark肯定如雷贯耳了,而spark就是用scala编写的,所以为了更好地了解scala,我们需要学习scala,接下来我将用博客记录我学习scala的全部过程!
推荐书籍《scala for th impatient》入门
《scala in depth》深入
一、语法特性
scala是一种面向对象的函数式编程语言,其函数式编程特性对使用者有着巨大的吸引力。
scala是静态类型语言,运行在jvm之上,可以和java互操作(使用java的类)。
scala是可以像python一样使用交互式界面的,这一点比java好太多。
推荐IDE:IntelliJIDEA,eclipse for Scala
二、基本语法
1.值与变量
值:val x=3
值x不可变
变量:var x=3
变量x可变
scala可以自动检测赋值的类型,当然也可以自己指定
var x:Int =3
2.常用的基本数据类型
Byte Char Short Int Long Float Double Boolean
3.方法(函数)定义
def 方法名(参数名:参数类型,):返回类型={
//block内最后一行为返回值,所以没有必要显示地return一个数值
}
当返回为Unit类型时,也就说方法没有返回值,可以简略为
def 方法名(参数名;参数类型,){
//block
}
如果函数没有函数,定义了一个函数printHello(),调用时可以直接只写函数名printHello就好!
如果block可以看成是一个大的表达式,如果block比较简单,如只由一行表达式构成,那么可以去掉block的花括号。
scala没有静态方法,通过Object实现。
4.一切皆对象
举个例子,简单的数字1,它也是对象,是有属性的。
1.to(10)将返回scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
1 to 10能达到同样的结果。Python中返回数字序列用的是1:11
5.分行写时语句中止不用写分号
6. 1 to 10 和 1 until 10 和Range
1to 10 scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
1 until 10 scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)
Range(1,10)
res10: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)
7.循环表达式
for while to Range until 没有continue 和 break
8.lazy value
只有用到时才初始化,关键字lazy,只能加在val之前,而不能加在var之前。适用于定义不确定后续会不会用来的变量,可以减少计算量。
9.函数参数
默认参数“大法好”,带名参数“随便放”,变长参数“灵活”
10.异常处理
try{
//要检测的代码
}catch{
case模型匹配
}finally{
//无论如何都会执行的代码
}
4.
ddd