Scala
为什么要学习Scala?
目前Spark是新一代的内存型大数据计算框架,是目前大数据技术生态圈中非常主流的一门技术。
而Spark就是使用Scala编写,包括Kafka早期底层也是用Scala写的,因此为了更好的学习Spark,看懂Spark源码,那就需要掌握Scala这门语言。
因此可以说Spark的兴起带动了Scala的兴旺。
静态类型语言和动态类型语言区别
静态类型语言是在还没运行期间就提醒哪里有错误,这个是在编译期间。
动态类型语言是在运行的时候才告诉你哪里错了,这个是在运行期间。
Scala是什么?
Scala是一门多范式语言(函数式编程和面向对象编程),且是一门静态类型语言,这门语言是产生自瑞士的洛桑联邦理工学院,Scala是可扩展语言(Scalable Language)的缩写。
Scala的作者是马丁奥德斯基,这个作者还是JDK5.0和JDK8.0编译器的编写者,因此我们可以看到在JDK5.0和8.0的很多内容和Scala似乎有重合之处,比如泛型、for循环增强、自动类型转换、Lambda表达式等都是从Scala引入的特性。
官网:https://www.scala-lang.org/
在Scala,一切都是对象,数字、符号都是对象
Scala和Java的关系
Scala是运行在JVM虚拟机上的
Scala可以调用Java的类库,如Scala的数组
Scala编译之后是class文件
Scala有自己的编译器,特定的语法使用Java是编译不过的
Scala的部分语法是可以使用Java编译器进行编译
面向XX编程解释
面向过程编程:看重业务步骤
面向对象编程:业务修改成对象之间的关系进行处理
面向接口编程:业务抽象成接口规则
面向切面编程:根据业务逻辑进行动态组织,假如从这里过的都要记录下姓名
面向命令式编程:解决问题的步骤
面向函数式编程:关系数据的映射、数学逻辑的运算
特点
1.运行在JVM和Javascript之上的语言
Scala不单是使用了JVM的高性能以及最优化性,连Java丰富的工具和类生态系统也为其所用,不过Scala并不只是运行在JVM之上,Scala-Js在让其在JavaScript的世界也可以运行。
Scala-js官网:http://www.scala-js.org/
2.静态类型语言
在Scala中静态类型是构建健壮应用系统的一个工具,Scala修正了Java类型系统中的一些缺陷,此外通过类型推导也免除了大量的冗余代码
3.混合式编程
Scala支持面向对象编程,Scala引入特质(trait),改进了Java的对象模型,trait能使用混合结构,简洁的实现新的类型,在Scala一切都是对象,符号、数组都是对象。
Scala完全支持函数式编程,函数式编程已经视为解决并发大数据以及代码正确性问题的最佳工具,使用不可变值,被使用一等公民的函数,无副作用的函数,高阶函数及函数集合。
4.复杂的类型系统
Scala对Java类型系统进行了扩展,提供了更灵活的泛型以及一些有助于提高代码的改进。
5.简洁优雅灵活的语法
Java冗长的表达式不见了。
6.可扩展框架
能够编写出简短的解释性脚本
使用特质实现的混合结构
HelloWorld.scala
object HelloWorld{
//def 就是definition
def main(args:
Array[String]): Unit = {
println(
"Scala Sao气冲天")
}
}
Scala执行流程图
Scala数据类型
小结
在Scala中所有类型所有一个统一的引用类型Any,这是Scala的特点。
Null是所有引用类型的子类型
Nothing是有类型的子类型,通常作为没有正常返回值的返回类型
Unit相当于Java的void
Nil是空集合的意思
Scala没有++、--操作符,用+=、-=。如:var i = 0; i += 3
在Scala中_ 是通用符,相当于Java的*,也可以作为替代符,用处很广
Scala不支持三元表达式
Scala可以在任意的地方使用import,Java只能规定在类的上方