《Scala程序设计》笔记 - 零到六十:Scala简介

Scala是一门满足现代软件工程师需求的语言;它是一门静态类型语言,支持混合范式;它也是一门运行在JVM之上的语言,语法简洁、优雅、灵活。Scala拥有一套复杂的类型系统,Scala方言既能用于编写简短的解释脚本,也能用于构建大型复杂系统。这些这是它的一部分特性。

为什么选择Scala

  • 运行在JVM和JavaScript之上的语言
  • 静态类型

    Scala修正了Java类型系统中的一些缺陷,此外通过类型推演免除了大量的冗余代码

  • 混合式编程范式——面向对象编程

    Scala完全支持 面向对象编程(OOP)。Scala引入特征(trait)改进了Java的对象模型。trait能通过使用混合结构(mixin composition)简洁地实现新的类型。在Scala中一切都是对象,即使是数值类型。

  • 混合式编程范式——函数式编程

    Scala完全支持函数式编程(FP),函数式编程已经被视为解决并发、大数据以及代码正确性问题的最佳工具。

  • 复杂的类型系统

    通过使用类型推演,Scala编写的代码能够和动态类型语言编写的代码一样简洁。

  • 简洁、优雅、灵活的语法
  • 可扩展的架构

关于Java 8

Java 8引入的新特性:

  • 匿名函数,Lambda表达式
  • 改进了接口,允许为声明的方法提供默认实现

使用Scala

脚本设计的初衷是为了简化代码,无须将声明(变量和函数)封装在对象中。将Java和Scala代码编译后,声明必须封装在对象中(这是Java字节码的需求)。scala命令通过将脚本封装在一个你看不到的匿名对象中解决了冲突。

Scala的变量名和方法名中允许出现尖括号<>,而Java中不允许标识符中出现这样的字符。为了避免出现歧义,Scala使用方括号而不是尖括号表示参数化类型,并且不允许标识符中出现方括号。

对于大多数面向对象编程语言而言,方法是指的类或者对象中定义的函数。

// src/main/scala/progscala2/introscala/upper2.sc

object Upper {
  def upper(strings: String*) = strings.map(_.toUpperCase())
}

println(Upper.upper("Hello", "World!"))

在第1行中,Upper被声明为单例对象,Scala将单例模式视为本语言的第一等级成员。

在第2行中,函数体定义省略了返回值。由于方法体中仅包含一句表达式,因此可以省略括号。Scala大多数情况下能够推断出方法的返回值类型。递归函数是个例外,由于它的执行域超过了函数体的范围,因此必须声明返回值类型。

写于2016年11月24日