Scala总结(一)
Scala简介
Scala 是 Scalable Language 的简写,是一门多范式的编程语言;是由 Martin Odersky 等人在 2003 年开发的,并于 2004 年首次发布;设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。Scala 源代码被编译成 Java 字节码,所以它可以运行于 JVM 之上,并可以调用现有的 Java 类库
Scala 特性
Scala特性分为面向对象特性、函数式编程、类型系统、扩展性、并发性、强大的标准库、与 Java 互操作性、模块化和可扩展性等
1. 面向对象特性:类和对象、继承和多态、抽象类和特质、封装
Scala 是一种高度表达性的编程语言,它结合了面向对象编程和函数式编程的最佳特性
2 . 函数式编程:高阶函数、不可变性、模式匹配、闭包
3.类型系统:静态类型、类型推断、泛型编程、类型系统扩展
Scala具备类型系统,通过编译时检查,保证代码的安全性和一致性。类型系统具体支持以下特性:泛型类、协变和逆变、标注、类型参数的上下限约束、把类别和抽象类型作为对象成员、复合类型、引用自己时显式指定类型、视图、多态方法
4. 扩展性:Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构:任何方法可用作前缀或后缀操作符、可以根据预期类型自动构造闭包
5. 并发性:Akka框架、Futures 和 Promises、Scala 并发集合
6. 强大的标准库:集合框架、字符串处理、IO操作
7. 与 Java 互操作性:无缝调用、Java标准库
8. 模块化和可扩展性:特质(Traits)、隐式转换和参数
Scala语言的特点
优雅、速度快是Scala语言的特点的两大特点
Scala是静态编译的,所以速度会快很多,能融合到Hadoop生态圈:Hadoop现在是大数据事实标准,Spark并不是要取代Hadoop,而是要完善Hadoop生态。JVM语言大部分可能会想到Java,但Java做出来的API太丑,或者想实现一个优雅的API太费劲。
学习Scala编程语言,为后续学习Spark和Kafka奠定基础
Scala 基础语法
Scala程序
分为交互式编程和脚本形式两种
交互式编程
交互式编程不需要创建脚本文件,可以通过以下命令调用:
脚本形式
我们也可以通过创建一个 HelloWorld.scala 的文件来执行代码,HelloWorld.scala 代码如下所示:
运行结果:
基本语法
- 区分大小写
- 类名:-对于所有的类名的第一个字母要大写 例:class MyFirstScalaClass
- 方法名称:所有的方法名称的第一个字母用小写 例:def myMethodName()
- 程序文件名:程序文件的名称应该与对象名称完全匹配,保存文件时,应该保存它使用的对象名称(记住Scala是区分大小写),并追加".scala"为文件扩展名。 (如果文件名和对象名称不匹配,程序将无法编译) 例:假设"HelloWorld"是对象的名称。那么该文件应保存为'HelloWorld.scala"
-
def main(args: Array[String]-Scala程序从main()方法开始处理,这是每一个Scala程序的强制程序入口部分
标识符
Scala 可以使用两种形式的标志符,字符数字和符号
字符数字使用字母或是下划线开头,后面可以接字母或是数字,符号"$"在 Scala 中也看作为字母
符号标志符包含一个或多个符号,如+,:,? 等
Scala 内部实现时会使用转义的标志符,比如:-> 使用 $colon$minus$greater 来表示这个符号
混合标志符由字符数字标志符后面跟着一个或多个符号组成,比如 unary_+ 为 Scala 对+方法的内部实现时的名称。字面量标志符为使用"定义的字符串,比如 `x` `yield`
Scala 关键字
下表列出了 scala 保留关键字,我们不能使用以下关键字作为变量
Scala 注释
Scala 类似 Java 支持单行和多行注释。多行注释可以嵌套,但必须正确嵌套,一个注释开始符号对应一个结束符号
空行和空格
一行中只有空格或者带有注释,Scala 会认为其是空行,会忽略它。标记可以被空格或者注释来分割
换行符
Scala是面向行的语言,语句可以用分号(;)结束或换行符。Scala 程序里,语句末尾的分号通常是可选的
Scala 包
定义包
Scala 使用 package 关键字定义包,在Scala将代码定义到某个包中有两种方式:
1. Java 一样,在文件的头定义包名,这种方法就后续所有代码都放在该包中
如:package com.runoobclass HelloWorld
2.些类似 C#,可以在一个文件中定义多个包
如:
package com.runoob {
class HelloWorld }
引用
Scala 使用 import 关键字引用包
import java.awt.Color // 引入Color
import java.awt._ // 引入包内所有成员
def handler(evt: event.ActionEvent) { // java.awt.event.ActionEvent
... // 因为引入了java.awt,所以可以省去前面的部分}
import语句可以出现在任何地方,而不是只能在文件顶部。import的效果从开始延伸到语句块的结束。这可以大幅减少名称冲突的可能性