Scala作为面向对象和函数式编程语言,在大数据领域有着广发的应用和优势,本博客后续会推出一系列有关Scala的博文,旨在为进入大数据行业的朋友们提供一些参考与学习,此篇博讲述了该系列博客的第一章,变量与函数的定义,欢迎广大朋友们一起学习、批评与指正。
1. 变量与函数的定义
1.1 scala与java版本兼容性
scala 2.10.X兼容jdk6, jdk7,不兼容jdk8;
scala 2.11.X兼容jdk8
1.2 val定义不可变的变量
1.2.1 不显示指定变量的类型
scala>val name="robot"
name:String = robot
注意: val关键字类似于java中的final关键字;
Scala可以根据变量值的类型来推断变量的类型。
1.2.2 显示指定变量的类型
val name:String=”robot”
name:String = robot
注意: 显示指定变量的类型,后面对变量的赋值只能是指定变量类型或其子类型;
对val修饰的变量不能进行修改,如果修改就会报错;
一般推荐使用val,因为val变量占用更少的内存。
1.2.3 同时对多个变量赋值
scala> val name1,name2,name3="spark"
name1: String = spark
name2: String = spark
name3: String = spark
1.3 var定义可变的变量
1.3.1 不显示指定变量的类型
scala> var address="changsha"
address: String = changsha
1.3.2 显示指定变量的类型
scala> var address:String="wuhan"
address: String = wuhan
注意: var修饰的变量的值是可以修改的
1.3.3 同时对多个变量赋值
scala> var (x,y)=(10,20)
x: Int = 10
y: Int = 20
1.4 函数定义
def functionName(parameterName:String ):String ={"my name is " + parameterName}
说明: def 类型关键字
functionName:函数名称
parameterName:形参名称
parameterName后面的String:形参类型
=前面的String:返回值类型
=:用来分隔函数声明和函数体;告诉编译器是否对函数的返回值进行类型推断,如果省去=,则认为函数没有返回值(实质返回值为Unit)。
scala> def myFunction()={"This is scala function"}
myFunction: ()String
scala> def myFunction(){"This is scala function"}
<console>:7: warning: a pure expression does nothing in statement position; you
may be omitting necessary parentheses
def myFunction(){"This is scala function"}
^
myFunction: ()Unit
1.5 main函数
Scala中的main函数需要存在于伴生类对象object中
注意:
(1) 函数体的最后一行的值就是整个函数的返回值;
(2) 类型的声明是位于变量或者函数或者类后面的;
1.6 函数的参数、返回值和调用
函数有参数时,参数类型必须声明;
返回值类型可以不声明,递归函数必须声明返回值类型;
在Scala中a.b(“xy”)形式的方法调用,可以写成:a b “xy”;
1.7 匿名函数
“参数列表 => 函数体” 定义一个匿名函数
scala> (s:String)=>s.length
res0: String => Int = <function1>
scala> ((s:String)=>s.length)("lubin")
res1: Int = 5
经过上面的定义后,该语句结束后匿名函数就消失了,为了能够持久的利用该函数,可以将它赋值给变量或作为参数传递给别的函数。
scala> val size=(s:String)=>s.length
size: String => Int = <function1>
scala> size("lubin")
res2: Int = 5
注意: 将函数赋值给变量,用变量来调用函数
scala> List("spark","hadoop","flink").map(size)
res3: List[Int] = List(5, 6, 5)
注意: 对于列表的每一项都使用同一函数文本
scala> List("spark","hadoop","flink").map((s:String)=>s.length)
res4: List[Int] = List(5, 6, 5)
注意: 对于列表的每一项都适用同一函数变量
1.8 可变参数的用法
scala> def variableParameter(s:String*)={s.foreach(x=>println(x))}
variableParameter: (s: String*)Unit
scala> variableParameter("lubin","spark","changsha","hadoop")
lubin
spark
changsha
hadoop
“`