Scala语言简要手册

为什么要scala?

函数式语言,函数也是对象。

闭包特性。

和Java是一家。它比Java的语言复杂度低很多。

Spark是Scala实现的,用Scala可以写Spark上的程序。

安装和使用

scala代码以scala为文件扩展名。

和java一样,scala的程序也运行在JVM上。scala的官方编译工具是SBT。可支持交互式运行。 sbt把scala源代码编译成java字节码,这样在任何jvm中运行。

scalac命令 把源代码编译为jvm字节码,产生hello.class scalac hello.scala

scala命令 将字节码运行在jvm中 scala hello

语法

val 是只读变量, var是可变变量

单个冒号 用于连接变量名称和它的类型。

[] 方括号 用于来定义类型参数

_ 下划线, 主要用于通配、元素访问、遍历等代码偷懒用途

=>

implicit 的作用,可以用一句话来概括:在编译器出现错误的时候,可以通过隐式转换进行一次补救. 通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,

asInstanceOf 、 isInstanceOf 类类型的判断和转换

classOf[T] 获取类型T的Class对象

TraversableOnce

class class就是一个普通的类,编译后只会生成一个文件;可以和object同名(此时class被称为伴生类,object被称为伴生对象) case class 样例类(case class)适合用于不可变的数据

object 在编译之后会生成两个.class文件,主要目的是为了模拟java的静态方法

extends … with …

值类型

Unit = {} 表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。

Seq 用于表示按照一定顺序排列的元素序列。 用Java术语来说,Scala的Seq将是Java的List,而Scala的List将是Java的LinkedList。

函数

函数的返回值类型 在 冒号后面,等号前边。 函数的返回值 直接写在函数末尾,可以不加 return。

命名函数

def fun(x: Int):Int = x + 1

匿名函数

(x: Int) => x * 2

闭包

闭包是一种带有状态的函数,它的返回值取决于该函数作用于之外的某个值。

普通的函数像数学函数函数一样,一样的输入一定得到一样的输出。而闭包这种函数自带了一个影响因子,会对输出结果产生影响。这个影响因子的值是在该闭包对象创建时才决定好的。

Trait

一个类除了有一个祖先类继承特性之外,还应该有许许多多的特质(trait)是从不同的地方继承来的。

scala的类不仅可以从父类继承,还可以从一个或者多个traits引入。

class person {
    ...
}

trait Java {
    val name: String
}

trait Scala {
    val name: String
}

class programmer extends person with Java with Scala{
    ...
}

trait是不可以实例化的,也不可以有构造函数的。

*****
Written by Lu.dev on 11 March 2020