1.为什么要学习scala?
2.scala的介绍
3.与java语言的对比
4.编译工具的安装
5.main方法讲解
6.常量和变量
7.数据类型
8.懒加载
9.差值器
1.为什么要学习scala?
(1)spark底层是用scala来 ,要想学好spark 我们就必须会scala这门语言
(2)scala语言有自己的有事无论是在变成的效率还是执行速度
离线计算 -->
在线计算 -->spark底层是用scala来 ,要想学好spark 我们就必须会scala这门语言
2.scala 语言的介绍
scala 是一门多范式的编程语言,及时面向对象也是函数式编程
面向对象:万物皆对象 封装 实例对象 类 继承
函数式编程: 面向过程 函数当成编程
问题1:什么是多范式?
多范式 :多种形式编程 常见的有过程式 函数式,泛型编程
面向对象 :把数据和数据的操作方法放在一起,作为一个相互依存的整体
函数式编程:把函数可以当成变量使用
函数式scala的一等公民
一等公民的特权:
1.函数可以传递和赋值
2.scala中可有嵌套函数和匿名函数
3.scala中支持高阶函数
4.scala还支持偏函数
5.scala支持闭包
3.scala语言和Java语言对比
相同点:
1.java和scala可以无缝混编,它们都是基于jvm
2.二者可以相互调用
不同点:
1.类型自动推到
2.val var
3.支持函数式编程
4.构造器不一样
5.java中可以自动默认值,scala中必须手动给默认值
6.scala 不需要分号,但是java 必须要有
7.get set 方法自己实现
age:相当于java中的getter方法
age_$eq:相当于java中set方法
8.java中的放回只用return scala 中没有return
9.
4.编译工具的安装
1)jdk
2)idea
3)插件安装(离线和在线都可以)
scala-intellij-bin-2017.2.2.zip (一个插件就搞定了)
4)创建一个scala项目测试一下
5)字体背景稍微调整一下
5.main方法讲解
main(static=object)
1)语法
关键字 方法名 (参数):放回只类型={
}
def main(args: Array[String]): Unit = {
}
6.常量和变量
1)定义
常量:是在运行的过程中,其值不会发生变化的量 例如:数值3 字母A 修饰的关键字val
变量:是在运行的过程中,其值可以发生变化的量 例如:时间,年龄 修饰的关键字var
2)语法
val name:Type=变量值
var name:Type=变量值
注意1:
类型可以不写,scala 可以自动类型推到
注意2:变量名称必须符合命名规范,不能使用关键字(命名规范和java一样)
1.字母,下划线,数字组成,并且不能以数字开头
val 4_tablename="t_user";
2.变量名要做到见名知意,(如果英文不好我们通过通过有道翻译)
3.用驼峰命名法命名多个单词组成的变量名
val tablename="t_user";
4.变量名不能使用关键字
val def =12
7.scala中的数据数据类型
any是所有类型的超类,也成为顶级类型
anyVal (值类型) :
int short byte long double string char boolean Uint (9个)
长度4 2 1 8 8 4 2 1
anyRef(引用类型) :
List map option yourclass …
注意:java类型中没有和scala中Nothing对应的类型
8.懒加载
1)scala 中使用lazy 关键字修饰变量,就是惰性变量,实现延迟加载
注意:惰性变量只能是不可变变量,并且只有在调用惰性变量时,才会去实例化这个变量
2)案例演示
//正常的
var str = {
println(“helloworld”)
}
//懒加载的形式
lazy val str1 = {
println(“helloworld”)
}
//调用这个变量
str1
3)好处
使用在比较耗时的业务中,如网络IO 磁盘IO 场景:
9.差值器
scala中有三种插值器
1.在任何字符串前面加上s,就可直接在字符串中使用变量了
val name:String=“cat”
println(s"she is name is
n
a
m
e
"
)
2.
f
插
值
器
:
v
a
l
h
e
i
g
h
t
=
1.23568
p
r
i
n
t
l
n
(
f
"
身
高
是
{name}") 2.f插值器: val height=1.23568 println(f"身高是
name")2.f插值器:valheight=1.23568println(f"身高是{height}%.2f")
3.raw插值器:是输入字符串原样,不进行转义
例如:
//没有使用raw
println("a\nb\n\tc")
//使用的效果
println(raw"a\nb\n\tc")