Scala简介

Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。
Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。
Scala 源代码被编译成 Java 字节码,所以它可以运行于 JVM 之上,并可以调用现有的 Java 类库。
Scala 特性
- 面向对象特性: Scala 是一种高度表达性的编程语言,它结合了面向对象编程和函数式编程的最佳特性。
·类和对象 : Scala 支持类和对象,可以定义属性和方法。
·继承和多态 : 支持类的继承和多态,可以创建层次结构和重用代码。
·抽象类和特质 : 可以定义抽象类和特质(traits),用于定义接口和实现部分行为。
·封装 : 支持访问控制修饰符(public、protected、private),实现数据的封装。
- 函数式编程:
· 高阶函数 : 函数可以作为参数传递给另一个函数,或者从另一个函数返回。
·不可变性 : 默认使用不可变数据结构,有助于避免副作用,提高代码的并发安全性。
·模式匹配 : 提供强大的模式匹配功能,可以解构复杂数据结构,进行条件判断。
·闭包 : 支持闭包,可以捕获并记住其创建时的变量。
- 类型系统:
Scala 是静态类型语言,编译的时候就能检查类型,保证代码安全和一致。它支持泛型类、协变逆变等很多特性,还有强大的类型推断机制,写代码时不用总写类型,代码看着更简洁;同时也支持泛型编程,能写出更通用、可复用的代码。
- 扩展性:
Scala的设计秉承一项事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展。Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构:
·任何方法可用作前缀或后缀操作符
·可以根据预期类型自动构造闭包。
- 并发性:
·Akka 框架 : 基于 Actor 模型,用于构建并发、分布式和容错的应用程序。
·Futures 和 Promises : 提供异步编程的抽象,简化并发任务的管理。
·Scala 并发集合 : 提供线程安全的数据结构,方便并发编程。
- 强大的标准库:
·集合框架 : 提供丰富的不可变和可变集合类,如List、Set、Map等。
·字符串处理 : 提供强大的字符串操作和正则表达式支持。
·IO 操作 : 支持文件和网络IO操作。
- 与Java互操作性
Scala 和 Java 能互相调用代码,Scala 还能使用 Java 的标准库和框架,利用 Java 丰富的生态系统。
- 模块化和可扩展性:
特质(Traits)可以混入类中,实现类似多重继承的功能,提高代码复用性;隐式转换和参数能让代码更灵活、可扩展。
Scala 的语言优势
Scala 的 API 设计得很优雅,用起来体验好;它表达能力强,一行代码能顶 Java 好几行,开发速度快,而且是静态编译的,运行速度也快;它能很好地融入 Hadoop 生态圈,在大数据开发方面有优势。学习 Scala 对后续学习 Spark 和 Kafka 有帮助。
Scala 基础语法
- 基本概念:Scala 程序由对象组成,对象间通过调用方法实现消息传递。对象具有属性和行为,是类的具体实例;类是对象的抽象;方法描述对象行为;字段是对象特有的实例变量集合,用于表示对象属性。
- 程序编写方式
- 交互式编程:无需创建脚本文件,在命令行输入 "scala" 进入交互环境,输入表达式即可求值,能即时看到结果,像输入 "1+1" 会得到 "2" ,输入 "println ("Hello World!")" 会输出 "Hello World!"。
- 脚本形式:创建以.scala 为扩展名的文件,如 "HelloWorld.scala",编写代码后,通过右键选择 "运行" 来执行程序。
- 基本语法规则
- 大小写敏感:Scala 中,"Hello" 和 "hello" 代表不同含义。
- 命名规范:类名首字母大写,若由多个单词构成,每个单词首字母都大写;方法名首字母小写,多个单词构成时从第二个单词起首字母大写;程序文件名建议与对象名完全匹配,并以.scala 为扩展名。
- 程序入口:Scala 程序从 "def main (args: Array [String])" 方法开始执行,这是程序运行的起始点。
- 标识符:Scala 的标识符分为字符数字和符号两类。字符数字标识符以字母或下划线开头,可包含字母、数字和 "\(",但避免使用"\)" 开头的标识符;符号标识符由一个或多个符号组成,如 "+"":" 等;还有混合标识符和字面量标识符。在 Java 代码中访问 Scala 的符号方法时,需使用 Scala 内部的转义名称。
- 关键字:Scala 有一系列保留关键字,如 "abstract""case""def" 等,不能将它们用作变量名。
- 注释 :和 Java 类似,Scala 支持单行注释(以 "//" 开头)和多行注释(以 "/" 开始, "/" 结束),多行注释可嵌套,但要注意正确配对,注释内容在编译时会被忽略。
- 空行和空格:仅包含空格或注释的行被视为空行,会被 Scala 忽略;标记可由空格或注释分隔。
- 换行符:Scala 语句可以用分号结束,也可以用换行符结束,通常语句末尾的分号是可选的,但一行写多个语句时需要用分号分隔。
- 包的使用
- 定义包:有两种方式,一种和 Java 一样,在文件开头用 "package" 关键字定义包名,该文件后续代码都属于这个包;另一种类似 C#,用大括号将类等代码包裹在包定义内,可在一个文件中定义多个包。
- 引用包:使用 "import" 关键字,可引入指定类或整个包的成员,"import" 语句的作用范围从其出现位置到所在语句块结束,可有效减少名称冲突。