DevilKing's blog

冷灯看剑,剑上几分功名?炉香无需计苍生,纵一穿烟逝,万丈云埋,孤阳还照古陵

0%

scala学习第一天

Scala把面向对象和函数式编程融合成一套,函数值就是对象,函数类型是能够被子类继承的类。

函数式编程有两种理念作为指导,第一种就是函数是第一类值,同整数或字符串,在同一地位。第二种主要的理念是,程序的操作符应该把输入值映射到输出值而不是就地修改数据,也就是更多的不可变的数据类型。也就是说方法不应有任何副作用: side effect。

好处: 兼容性,简洁性,高层级,静态类型的

类型推断:type inference

var val的区别:

  • val: 当你用val定义一个变量,那么这个变量就不能重新赋值,但它指向的对象却可以暗自改变
  • var: 表明为指令式的风格编程,

指令式 imperative风格编程,转化为 函数式 functional风格编程

伴生对象: companion object, apply

scala部分,操作符为右操作符,例如::,:::,list的add操作,没有append操作

scala部分,public是缺省的访问级别。

scala编译器可以将任何类型转换为Unit

1
2
3
4
5
class ChecksumAccumulator {
private var sum = 0
def add(b: Byte): Unit = sum+=b
def checksum(): Int = ~(sum & 0xFF) +1
}

分号的推断

scala比java更加面向对象,scala没有静态成员。替代品部分,采用单例对象,singleto object。每个单例对象,都被作为由一个静态变量指向的虚构类,

单例对象与某个类共享同一个名称,伴生对象,companion object. 孤立对象,standalone object.

1
2
3
4
5
6
object Summer {
def main(args: Array[String]) {
for (arg <- args)
println(arg + ":" + calculate(arg))
}
}

fsc(快速Scala编译器)的Scala编译器后台服务,创建本地的端口运行服务后台。

Application 特质,extends Application, 因为Application声明了带有合适签名的main方法,并由你的单例对象继承,使它可以像个scala程序使用。相关括号之间的代码呗收集进了单例对象的主构造器: primary constructor。 缺点:无法获取args,同时,jvm的线程模型局限