scala 简介

  1. Java 方言之一,java的方言除了scala还有kotlin、groovy、clojure等。
  2. 运行在JVM之上
  3. scala和kotlin、groovy、clojure一样是多范式编程语言,支持函数式编程
  4. scala常用领域是并发编程
  5. 大数据框架 spark是用scala实现的,play框架支持scala
  6. scala是静态语言
  7. scala在国外的使用和学习环境,明显好于国内。毕竟,tweet等知名网站是使用scala实现的。国内通过scala实现的,知名的网站没有呢。

scala入门建议前置学习的内容

学习笔记(1)

1.1字面量、值、变量、类型

val a : Int = 1

==下图是Scala类型层次体系==

graph TD
    AnyVal--> Any
    AnyRef--> Any
    Nothing --> Null
    Null --> Classes
    Classes --> AnyRef
    Collections --> AnyRef
    String --> AnyRef
    NumericType --> AnyVal
    Char --> AnyVal
    Boolean --> AnyVal
    

常用类型操作 操作名 | 示例 | 描述 —-|—-|—- asInstanceOf[type] | 5.asInstanceOf[Long]|将一个类型的值转换成指定类型的值 getClass|7.getClass|返回一个值的类型 isInstanceOf|(5.0).isInstanceOf[Float]|如果这个值有给定的类型,则返回true hashCode|“A”.hashCode|返回这个值的哈希码 to<type> |20.toByte;47.toFloat|类型转换 toString|(3-5).toString|转换成字符串

1.2 表达式和条件式

表达式

scala> 1 + 1
res0: Int = 2

res0是解释器自动创建的变量名称,用来指代表达式的计算结果。它是Int类型,值为2。

Scala中(几乎)一切都是表达式。

代码块 用大括号{}包裹起来的代码是代码块。注意,scala里面的{}和java里面的{}在使用是,其实是有区别的。scala里面的函数定义,并不是一定需要{}的,如果代码只有一条语句,或者写在一行之类,那么{}其实是可以省略的。下面是例子 def a:String = “hello world!” def b():String = {"hello world!"} 例子中的两个function,a和b,功能上是等效的,而且都是正确的写法。

题外话,scala是出了名的难学,很大一个原因就是scala特别的自由。本人是非常喜欢scala的语法的,非常的灵活,没有太多一定要遵守的格式,而且函数可以变得非常的简洁。这个对提升开发效率是非常有用的一个点。而且,简短的代码又非常有利于代码的review。

条件式

if…else表达式块 scala的if else 和java的if else还是比较像的,但是scala的if…else不是语法结构块,scala的if…else可以用在赋值表达式上面这点非常的重要,可以简化代码

//这个表达式返回值是Unit,即空值。
var result = if(false) "when true return this"

java的等效代码

if(false){
String result = "when true return this";
}else{
String result = null;
}

这样一对比,是不是觉得scala的代码简洁太多了。

匹配表达式 match是scala里面类似于java里“switch”语句的存在,但是无论是scala的match还是kotlin里面的when,都比java里面的“switch”强大太多了。 这里只讲基本写法,match的强大只能在使用中去体会,很难很快说明match的强大之处

val a =1
val b=2
val big = a>b match{
case true : a
case false : b
}

匹配表达式有很多的使用技巧,包括模式替换值绑定模式哨位指定模式变量。这些也都是scala语言,语法灵活的一个体现。

循环

scala支持的循环有for循环以及while和do/while循环 scala的for循环比起java也要简洁很多。 下面是一个7次循环的例子

for (x <- 1 to 7 ) {println(s"Day $x")}

这个循环的结果就是打印如下内容

Day 1
Day 2
Day 3
Day 4
Day 5
Day 6
Day 7

很短对不对,i变量都省了。 下面基于这个,再介绍Scala中的yield。

for (x <- 1 to 7 ) yield {s"Day $x:"}

这样写,好处就是简洁……