Scala把面向对象和函数式编程融合成一套,函数值就是对象,函数类型是能够被子类继承的类。
函数式编程有两种理念作为指导,第一种就是函数是第一类值,同整数或字符串,在同一地位。第二种主要的理念是,程序的操作符应该把输入值映射到输出值而不是就地修改数据,也就是更多的不可变的数据类型。也就是说方法不应有任何副作用: side effect。
好处: 兼容性,简洁性,高层级,静态类型的
类型推断:type inference
var val的区别:
- val: 当你用val定义一个变量,那么这个变量就不能重新赋值,但它指向的对象却可以暗自改变
- var: 表明为指令式的风格编程,
指令式 imperative
风格编程,转化为 函数式 functional
风格编程
伴生对象: companion object
, apply
scala部分,操作符为右操作符,例如::
,:::
,list的add操作,没有append操作
scala部分,public是缺省的访问级别。
scala编译器可以将任何类型转换为Unit
1 | class ChecksumAccumulator { |
分号的推断
scala比java更加面向对象,scala没有静态成员。替代品部分,采用单例对象,singleto object。每个单例对象,都被作为由一个静态变量指向的虚构类,
单例对象与某个类共享同一个名称,伴生对象,companion object. 孤立对象,standalone object.
1 | object Summer { |
fsc(快速Scala编译器)的Scala编译器后台服务,创建本地的端口运行服务后台。
Application 特质,extends Application, 因为Application声明了带有合适签名的main方法,并由你的单例对象继承,使它可以像个scala程序使用。相关括号之间的代码呗收集进了单例对象的主构造器: primary constructor。 缺点:无法获取args,同时,jvm的线程模型局限