《Programming in Scala》读书笔记

  不得不感叹一下,这本书真的是神做,不愧是Scala语言做者本身写的书。整个书的内容条理很是清晰,对于有些地方的设计也给出了具体的缘由,能让你对整个语言有更好的把握。深刻学习Scala必读书籍,强烈推荐!
    另外不得不发一下牢骚,这本书出来都几年了,中文翻译好久以前就开始在作,结果一直没见到影子。无奈又特别想看这本书,但英文原版书籍在国内买不到,实在没办法就去买了个印刷的盗版。正当我读了没几天,竟然就在我写这个博文时获得消息,中文版出来了,个人个汗啊...还好英文版的也很好懂,其实仍是蛮喜欢读原版书籍的,有些书的译本挺不负责任的,不知道这本中文版如何。但愿这本书能让国内开始风靡Scala,如今真是我的大爱啊,就想要个静态编译的函数式语言,基本就没什么能够选的了。
    言归正传,如下只是我的的读书笔记,就记录本身比较关心的要点。因为看的原版书籍,不少地方就直接用e文了,我也不是搞翻译的,一人一个中文翻译名词更让人摸不到头脑。
 

Chapter 1. A Scalable Language

1. 使得Scala拥有扩展性的缘由:
(1) 更加OO的方式
(2) Functional
2. Scala的特性:
(1) 与Java的兼容性
(2) 简洁
(3) 更高层次的抽象
(4) 静态类型
 

Chapter 5. Basic Types and Operations

1. 数字的数据类型和Java基本都同样。String型在声明能够用""",不会转义。
2. 比较有意思的是换行还能对齐,例如:
println("""|line one
           |line two""".stripMargin)
3. 操做符都是函数方法,用unary声明的,好比:+是unary_+方法。
4. 比较牛逼的地方是优先级作的很好,和数学上是同样的,用起来很是方便;另外数据类型转换也是自动的。
5. 须要注意的一点是==含义是比较值,与Java的equals是同样的;Scala的eq方法与Java的==是同样的。
 

Chapter 6. Functional Objects

1. 尽可能使用不可变对象,优势:
(1) 只会有简单的改变数据的缘由
(2) 使用起来能够很自由
(3) 多线程的协同性更好
(4) 拥有安全的hashtable keys
缺点:须要维护一个对象图,当数量过大可能会有些性能问题。
2. class中能够有require方法作参数检查。
3. 多个构造器只能分开写,一个主构造其在声明class的地方写,其余辅助构造器写在class里面,且只能放在其余方法前面。
4. 遇到与保留字冲突时,能够使用``来让系统识别。
5. implicit能够声明系统自动调用的方法。
 

Chapter 7. Built-in Control Structures

1. if没啥好说的。
2. while循环是做者特别保留下来的,其实正统的函数式语言是不须要这个的,可是做者考虑到有些时候用循环仍是更直观。另外须要注意一下,Scala是没有break和continue的,只能用if,其实用if改写之后代码会更漂亮。
3. For就作的太牛逼了,大概有这么些特性: 
(1) Iteration through collections,eg:for(value <- list)
(2) Filter,eg:for(value <- list if value > 0)
(3) Nested iteration,eg:for(v1 <- list1; v2 <- list2)
(4) Mid-stream variable bindings,eg:
    for{ v1 <- list1
         v1 += 1
         v2 <- list2
    } ...
(5) Producing a new collection,eg:
    val newList =
        for{
            value <- list
            if value > 0
        } yield value
4. Throw出来的Exception是Nothing类型的,外层代码能够安全使用。
5. 强大的Pattern Match,用起来很爽,比Java的switch强太多。
 

Chapter 8. Functions and Closures

1. 尽可能把仅调用一次的Helper方法内嵌到使用方法内,Scala支持方法嵌套。
2. Fuction是open term的,Closure是closed term。尽可能使用Function来加强上下文无关性。
3. 有不少函数简化的写法,可是要慎重使用以避免影响可读性。
 

Chapter 9. Control Abstraction

1. 使用函数做为参数能够减小代码的重复。
2. 使用Collections自带的方法能够简化代码。
3. Curry能够使代码更结构化。
4. Loan Pattern来封装finally操做。
 

Chapter 10. Composition and Inheritance

1. 支持uniform access principle,只要把父类中的def方法改为val便可。
2. 对于有side effect的方法,建议不要去掉空括号,好比println()。
3. Scala只有两个namespace,分别是values(fields, methods, packages, and singleton objects)和types(class and trait names),因此不能存在如同名的field和method。
4. override强制要求声明。
5. 子类override父类方法能够简写成:
  class Dog( override val name: String ) extends Animal
6. 子类能够直接使用父类构造器的参数,例如:
  class LineElement( s: String ) extends ArrayElement( Array(s) ) { 
      override def width = s.length
  }
相关文章
相关标签/搜索