Scala快速入门-基础语法

By timebusker on December 30, 2017

Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。

背景

  • 因为Spark是由Scala开发的,所以在开发Spark应用程序之前要对Scala语言学习。虽然Spark也支持Java、Python语言,但是作为一名Java程序猿,还是决定要学习Scala。
  • Scala是运行在JVM上一门语言。开发效率非常高、语法丰富简洁,三两行Scala代码能搞定Java要写的一大坨代码。
  • Scala的语法糖太甜~~

Scala特性

面向对象特性

  • Scala是一种纯面向对象的语言,每个值都是对象。

函数式编程

  • Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数(操作函数的函数),允许嵌套多层函数,并支持柯里化。Scala的case class及其内置的模式匹配相当于函数式编程语言中常用的代数类型。

  • 可以利用Scala的模式匹配,编写类似正则表达式的代码处理数据。

并发性

  • Scala使用Actor作为其并发模型,Actor是类似线程的实体,通过“邮箱”发收消息。Actor可以复用线程,因此可以在程序中可以使用数百万个Actor,而线程只能创建数千个。在2.10之后的版本中,使用Akka作为其默认Actor实现。

基本语法

  • 区分大小写:Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义。
  • 类名:对于所有的类名的第一个字母要大写。示例:class MyFirstScalaClass
  • 方法名称:所有的方法名称的第一个字母用小写。示例:def myMethodName()
  • 程序文件名:程序文件的名称应该与对象名称完全匹配(文件名和对象名称不匹配,程序将无法编译)。
  • def main(args: Array[String]):Scala程序从main()方法开始处理,这是每一个Scala程序的强制程序入口部分。

声明变量、常用类型

  • scala代码会被编译成字节码,然后交给Java虚拟机执行。
  • 不强制指定变量的类型,编译器会推断出来。
scala> 8 * 5
res0: Int = 40
  • val定义的值无法改变它的内容。在Scala中,鼓励使用val。
scala> val answer = 8 * 5
answer: Int = 40

scala> answer = 10
<console>:8: error: reassignment to val
       answer = 10
  • 如果要声明其值可变的变量,用var。
scala> var counter = 0
counter: Int = 0

scala> counter = 10
counter: Int = 10
  • 变量或函数的类型总是写在变量或函数名称后面,与Java的习惯不同。
scala> val greeting : String = "Hello"
greeting: String = Hello
  • 不需要使用分号最后,仅当同一行代码中存在多条语句时才需要分号隔开。
  • 常用的数据类型与Java一样,Byte、Char、Short、Int、Long、Float、Double及Boolean,这些都是类。
  • 在基本类型和包装类型之间的转换是Scala编译器的工作。
  • +-*/%等操作符实际上是方法。
  • 对于BigIntBigDecimal对象,可以以常规的方式使用数学操作符(但在Java中同样的操作要写成x.multiply(x))。
scala> val x : BigInt = 123
x: BigInt = 123

scala> x * x
res1: scala.math.BigInt = 15129
  • 不带参数的Scala方法通常不使用圆括号,一般没有参数且不改变当前对象的方法不带圆括号。