一:scala简介
官网:https://www.scala-lang.org/
Scala语言很强大,集成了面向对象和函数式编程的特点。
运行在JVM(jdk)。
大数据中为什么学习scala?
spark是scala语言编写。
python写spark 挺好的
java写spark 很糟糕(代码实在是太多了)
scala写spark 很完美
二:scala特点
1)优雅
框架设计中第一个要考虑的问题就是API是否优雅。
精简的封装。
代码精简(少)。
2)速度快
scala语言表达能力强。
一行代码=多行java代码,开发速度快。
3)完美融合hadoop生态
scala是静态编译,表达能力强并且代码量少。
三:安装Scala
1)下载
2)解压
3)配置环境变量(我是win10系统的,简单的安装,没有弄什么SACLA_HOME那些花里胡哨的东西。直接添加Scala的
bin目录到Path中就行了)
SCALA_HOME=
path
四:Scala基础语法
1)Scala程序的开始(编译器用的是Idea。安装一个Scala的插件就可以用了)
Helloworld
2)Scala的数据类型
Scala与java一样,有8中数值类型:
Byte/Char/Short/Int/Long/Float/Double/Boolean/
和Unit类型(void)
注意:scala中无包装类型。
Unit:表示无值,用于不返回任何结果的方法的结果类型。
3)Scala定义变量
两个关键字:val var
val:定义变量值不可变
var:定义的变量值是可变的
scala编译器会自动的推断类型!
指定类型: val str:String = "dawn"
注意:类型要保持一致
Unit = ():()相当于什么都没有用()表示。
4)条件表达式
if:判断(和java差不多)
val y = if(x>0) 1 else 2
Any:包含Anyval和AnyRef
Anyval:包含scala所有类型
AnyRef:Scala classes与Java Classes
Any相当于java的Object
val k = if(x<0) 0 else if(x>=1) 1 else -1
if和else if:多个条件的判断,符合条件看左侧,不符合条件看右侧
5)块表达式
在scala中{}包含一系列表达式,块中的最后一个表达式的值就是块的值
6)循环
Scala拥有与Java和C++相同的while和do循环
Scala中,可以使用for和foreach进行迭代
使用for循环案例:
注意:
(*) <- 表示Scala中的generator,即:提取符
(*)第三种写法是第二种写法的简写
在for循环中,还可以使用yield关键字来产生一个新的集合
在上面的案例中,我们将list集合中的每个元素转换成了大写,并且使用yield关键字生成了一个新的集合。
使用while循环:注意使用小括号,不是中括号
使用do ... while循环
使用foreach进行迭代
注意:在上面的例子中,foreach接收了另一个函数(println)作为值
源码:
package dawn.day01 /** * @author Dawn * 2019年6月11日17:01:23 * @version 1.0 * scala基本语法基础 */ object Demo1 { def main(args: Array[String]): Unit = { //定义一个集合 var list =List("dawn","Anlis","xiaomei") var i=0 println("**********************第一种循环for **********************************") for(s <- list){ println(s) } println("**********************第二种循环while **********************************") while(i<list.length){ println(list(i)) i+=1 } println("**********************第三种循环do...while **********************************") i=0 do{ println(list(i)) i+=1 }while(i<list.length) println("**********************第四种循环foreach(println) **********************************") list.foreach(println) println("测试yield方法") //测试yield var newList=for{ s <-list if s.length<=5 }yield (s) //toBuffer相当一java中toString println(newList.toBuffer) } }
7)方法定义
Scala中 + - * / % 的作用和Java一样,但是特别的是,这些操作符实际上是方
法。个人觉得scala中所有定义的变量都是对象
1 to 10
1.to(10)
定义一个方法:
def m1(a:Int,b:Int):Int = {
a + b
}
def:定义方法的关键字
m1:方法名
a:参数列表
b:参数列表
Int:返回值类型
a + b:函数体