Scala
一.Scala 简介
Scala即Scalable Language(可伸缩的语言),Scala 语言是由 Martin Odersky 等人在 2003 年开发的,并于 2004 年首次发布。意味着这种语言设计上支持大规模软件开发,是一门多范式的编程语言。
Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。
Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。
Scala 源代码被编译成 Java 字节码,所以它可以运行于 JVM 之上,并可以调用现有的 Java 类库。
Scala 运行于 Java 平台(Java 虚拟机),并兼容现有的 Java 程序。
Scala 的编译模型(独立编译,动态类加载)与 Java 和 C# 一样,所以 Scala 代码可以调用 Java 类库(对于.NET实现则可调用.NET类库)。
二.Scala的特性
1.面向对象:一切皆对象,类可继承,支持单继承与特质(类似接口)多继承。
2.函数式编程:函数为一等公民,可作变量传递、返回值;支持高阶函数、不可变性、模型匹配、闭包。
3.静态类型:编译时检查类型,保证代码安全性与性能,有类型推断减少代码量。
4.与Java互操作性:运行于JVM,可调用Java类库,无缝集成Java代码。
5.模式匹配:比Java的switch强大,能匹配多种类型,如对象、集合。
6.并发与分布式编程:提供Actor模型等并发编程模型,简化多线程编程。
7.高阶抽象:支持隐式转换和参数,在不修改代码时扩展功能。
8.应用场景:常用于大数据处理(如Apache Spark)、分布式系统开发、函数式编程教学研究等。
代码示例
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello, world!")
}
}
9.模块化和可扩展性
特质(Traits): 可以混入类中,提供类似多重继承的功能,增强代码复用性。
隐式转换和参数: 支持隐式转换和隐式参数,增强代码的灵活性和可扩展性。
三.Scala语言的特点
优雅:这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员,API是否优雅直接影响用户体验。
速度快:Scala语言表达能力强,一行代码抵得上Java多行,开发速度快;Scala是静态编译的,所以速度会快很多。
能融合到Hadoop生态圈:Hadoop现在是大数据事实标准,Spark并不是要取代Hadoop,而是要完善Hadoop生态。JVM语言大部分可能会想到Java,但Java做出来的API太丑,或者想实现一个优雅的API太费劲。
学习Scala编程语言,为后续学习Spark和Kafka奠定基础。
四.Scala基础语法
1..Scala与Java的联系与区别
联系:如果之前学习过Java的基础知识,学习Scala会相对容易。
区别:Scala语句末尾的分号是可选的。
2..概念
对象、类、方法、字段
对象:拥有属性和行为,是一个类的实例。
类:对象的抽象,具体实例是对象。
方法:描述行为,类可含多个。
字段:对象独有的实例变量集合。
3.编写Scala程序
①. 交互式编程
直接通过命令调用不需要创建脚本文件。以下面命令调用:
②. 脚本形式
创建 .scala 文件如 HelloWorld.scala ,右击选择“运行”。代码如下:
4.基本语法要点
①. 大小写敏感
标识 Hello 和 hello 在Scala中的含义不同。
②. 类名与方法名规范
类名首字母大写,若多个单词则每个单词首字母大写。
示例:class MyFirstScalaClass
③.方法名称
首字母小写,若多词则后续单词首字母大写。
示例:def myMethodName()
③. 文件名建议
文件名称应与对象名称一致并以 .scala (记住区分大小写)扩展名结尾。
④程序入口 def main(args: Array[String]) 程序从main()开始是必需的。这是进入Scala强制入口。
5.标识符与关键字
①标识符
定义规则:可以由字母、数字、下划线组成,但不能以数字开头。也能使用操作符作为标识符,如 + 等。
命名规范:类名用大写字母开头的驼峰命名法,如 MyClass ;方法和变量用小写字母开头的驼峰命名法,如 myMethod 。
特殊标识符:使用反引号能把任意字符串作为标识符,如 yield ,适用于和关键字冲突的情况。
②关键字
常用关键字: val 用于定义不可变变量, var 定义可变变量; def 定义函数; class 定义类; object 定义单例对象; trait 定义特质(类似接口); if 、 else 、 while 、 for 用于流程控制。
注意事项:关键字不能作为普通标识符使用,但可通过反引号方式使用。
6.注释
支持单行和多行注释,多行注释可以嵌套但必须正确嵌套,不影响编译。一个注释开始符对应一个结束符号。
7.空行、空格及换行符
一行中只有空格或者带有注释,Scala 会认为其是空行被忽略;语句可用分号或换行符结束,一行多语句时分号必填。标记可以被空格或者注释来分割。
8.包的定义与引用
①定义包:使用 package 关键字,有两种定义方式。
第一种方法简单定义:和Java一样在文件开头用 package 关键字声明,如 package com..runoobclass ,后续代码属于该包。
嵌套定义:可以通过大括号嵌套定义包,清晰展示包结构。类似与C#,可以在一个文件定义多个包
②引用包
单引用:使用 import 关键字引用单个类或对象,如 import java.util.color。
通配符引用:用 _ 作为通配符引入包下所有内容, import java.util._ 。
选择性引用:可选择引入部分成员, import java.util.{Date, Calendar} 。
重命名引用:使用 => 重命名引入的成员避免命名冲突, import java.util.{HashMap => JavaHashMap} 。
引用: 使用import 关键字,可以出现在任何地方不仅限于文件顶部,可减少命名冲突。