What ?
- 函数式编程(erlang,也是)
- 基于jvm
- 面向函数的编程语言
- 运行于JVM,与java代码混编
- 类型推测(自动推测类型)
- 并发和分布式(Actor)
- 特质,特征(类似 java 中 interfaces 和 abstract 结合)
- 模式匹配(类似 java switch
- 高阶函数
<!-- more -->
基本类型
- byte
- short
- int
- long
- float
- double
- char
- string
- boolean
- unit 表示 无值 相当于 void
- null 空引用
- nothing 所有其它类型的子类型 无任何东西
- any 所有类型的超类
- anyref 所有引用类型的超类
- anyval 所有值类型的超类
变量常量声明
- var
- val
- 常量不可再赋值
Where ?
Why?
- 为何学习scala
-
用Scala写的软件
- jstorm
- 语言与产品
- Scala - spark kafka
- Go - Docker
- Erlang - RabbitMQ
- clojure - Storm
How?
环境搭建
- brew install Scala
brew install scalaenvscalaenv install - intellj ideal 安装 Scala 插件
- jdk
语法
-
集合
- list
- map
- foreach
- distinct
- sortby
- slice
- /: = foldLeft
- reduce = redeceLeft
- filter
- take
- 元组 tuple
- list
-
伴生对象
- object
- 静态方法
- 静态变量
- 相当于单例
-
伴生类
- class
- 非静态方法
- 非静态变量
-
特征特性 trait
-
case class 模式匹配
-
隐式转换 impliit
- 方法
- 参数
-
高阶函数
函数的 参数 依然是个 函数
-
柯里化
函数参数 用 括号分割,
类和对象
注意点:
- 建议类名首字母大写 ,方法首字母小写,类和方法 命名建议符合驼峰命名法。
- scala 中的 object 是单例对象,相当于 java 中的工具 类,可以看成是定义静态的方法的类。object 不可 以传参数。另:Trait 不可以传参数
- scala 中的 class 类默认可以传参数,默认的传参数就 是默认的构造函数。 重写构造函数的时候,必须要调用默认的构造函数。
- class 类属性自带 getter ,setter 方法。
- 使用 object 时,不用 new,使用 class 时要 new ,并且 new 的时候,class 中除了方法不执行,其他都执行。
- 如果在同一个文件中,object 对象和 class 类的名称 相同,则这个对象就是这个类的伴生对象,这个类 就是这个对象的伴生类。可以互相访问私有变量。
条件
- if
- if else
- if else if else
循环
- to 和 until
- for
- for (i <- 1 to 10)
- 返回值yield
- var tmp = for ( i <- 1to 10) yield i
- 嵌套循环
- for (i <- 1 to 10; j <- 1 to 10)
- 条件过滤
- for(i <- 1 to 10; if(布尔表达式))
- while
- do {循环体} while(布尔表达式)
- while(布尔表达式){循环体}
函数的定义
- 有参函数
- 无参函数
- 递归函数
- 嵌套函数
- 匿名函数
- 偏函数
- 高阶函数
- 柯理化函数
注意点:
- 函数定义语法 用 def 来定义
- 可以定义传入的参数,要指定传入参数的类型
- 方法可以写返回值的类型也可以不写,会自动推断,有 时候不能省略,必须写,比如在递归函数中或者函数的 返回值是函数类型的时候。
- scala 中函数有返回值时,可以写 return,也可以不写 return,会把函数中最后一行当做结果返回。当写 return 时,必须要写函数的返回值。
- 如果返回值可以一行搞定,可以将{}省略不写
- 传递给方法的参数可以在方法中使用,并且 scala 规定 方法的传过来的参数为 val 的,不是 var 的。
- 如果去掉方法体前面的等号,那么这个方法返回类型必 定是 Unit 的。这种说法无论方法体里面什么逻辑都成 立,scala 可以把任意类型转换为 Unit.假设,里面的逻 辑最后返回了一个 string,那么这个返回值会被转换成 Unit,并且值会被丢弃。
字符串
集合
- 数组
- list
- set
- map
- 元组