一、常量和变量
常量定义使用关键字val 例如:val a:Int=2
变量定义使用关键字var 例如:var a:String="abc"
常量和变量的区别就是常量一旦赋值就值就不能再改变,而变量的值是可变的
由于在Spark大型系统中,有大量的网络传输,所以为了防止数据的错误更改,建议尽量使用val
变量定义时可以省略类型,scala会自动推导匹配类型
二、数据类型
Scala的数据类型统一都是类
Scala的类型包括基本数据类型和加强版类型
Scala中的基本数据类型和Java中相同,但是所有类型的首字母必须大写
加强版类型例如StringOPS 、RichInt等等
三、操作符
大部分与Java中相同,只是Scala中没有++和--操作符
四、循环、控制
1、if表达式
Scala中if表达式是有返回值的,例如可以这样写:val isAdult = if (age > 18) 1 else 0
if表达式具有自动的类型推断,当if和else的类型不同时,表达式的返回类型是这两个类型的公共父类型。例如:if(age > 18) "adult" else 0, 此时if和else的值分别是String和Int, 则表达式的值是Any, Any是String和Int的公共父类型
2、输入输出
读取控制台的输入可以使用read+数据类型,例如readInt、readString
输出使用和java中相同,print和println(println输出后换行),另外加一种printf,printf是一种格式化的输出方式,可以使用占位符例如%s,%d等,然后将变量传入
例如:printf("Hi, my name is %s, I'm %d years old.\n", "lilei", 18)
3、循环
Scala中具有和Java相同的循环结构,例如for循环、while循环、dowhile循环
Scala中的for:for(i<-表达式),把右边表达式中的值逐个赋给i
for(i<-0 to 10) 把0,1,2,3,.....,8,9,10逐个赋值给i
for(i<0 until 10)把0,1,2,3,....,8,9逐个赋值给i ,注意此处不包含10
这里有两个新概念,守卫式和推导式
守卫式:for循环中添加过滤条件if语句,即为守卫式
例如:for(i<- 0 to 10, j<- 0 to 9 if i > j)print((2*i+j) + "\t")
推导式:如果for循环的循环体以yield开始,则该循环会构造出一个集合,每次迭代生成集合中的一个值
for(i<- 0 to 10)yield i%2
多重for循环,基本与java中的思想一致,只是写法可以写成for(i<- 0 to 10, j<- 0 to 10)
五、函数
函数使用def定义def就是defunction的缩写,意为定义方法
注意 scala中的代码每行的最后不需要使用分号
def sum(n: Int) :Int= {
var sum = 0;
for(i <- 1 to n) sum += n
sum
}
String = "Green") = firstName + " " + middleName + " " + lastName
if (nums.length == 0) 0
else nums.head + sum2(nums.tail:_*)
}
如果想使用可变集合Map,必须导入scala.collection.mutable.Map