`
kdlan
  • 浏览: 13026 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Programming in Scala 2nd 读书笔记 2

阅读更多
Build-in Control Structure

for的声明里跟上if可以直接过滤符合条件的元素到for循环体里调用

多级的for循环可以直接在for里面声明
多级循环
{}内的语句会自动推断分号的位置
()里必须写清楚分号
for的声明后跟上yield会将for声明里符合条件的元素重新返回成为一个Array

不过函数式风格的编程里是没有for循环的,一般是用递归实现
多使用自带的foreach之类的接口

match 类似java的switch
但是不需要在每个case后面跟break;
默认的case 使用_

函数式编程里不要使用break和continue
虽然scala提供了机制可以使用
不过最好忘了他

Functions and Closures

可以在方法体内定义新的方法提高代码可读性和代码重用,避免满屏的私有方法

函数对象的声明
val func=(x: Int) => x + 1

向一些方法中传递的函数也基本上是上面类似的格式

scala> someNumbers.filter(x => x > 0)
也可以写成
scala> someNumbers.filter(_> 0)
直接使用_替代
多参数使用多个_,参数顺序同_的顺序

def sum(a: Int, b: Int, c: Int) = a + b + c
val b = sum(1, _: Int, 3)
b(2)

上面这个感觉有点闭包的意思



不定参数的声明
java中使用...
scala中使用*  def echo(args: String*)
方法调用时(包括构造方法)可以指明参数的名称
如 def speed(distance: Float, time: Float): Float
调用时 speed(distance = 100, time = 10)

参数默认值

尾部递归调用会被编译器优化为循环实现,要求比较严格

Control Abstraction
对于一些模板代码,通过传递函数来实现不一样的部分(对比java的模板方法模式,继承和传递接口实现,实在是方便太多了)
object FileMatcher {
  private def filesHere = (new java.io.File(".")).listFiles
  private def filesMatching(matcher: String => Boolean) =
    for (
      file <filesHere;
      if matcher(file.getName)
    ) yield file
  def filesEnding(query: String) =
    filesMatching(_.endsWith(query))
  def filesContaining(query: String) =
    filesMatching(_.contains(query))
  def filesRegex(query: String) =
    filesMatching(_.matches(query))
}


代码实现时尽量简化client调用的代码

Currying(咖喱棒?不知道怎么翻译)
类似数学里有f(x,y),先给定x的值,然后拿出去再给定y的值
有几种实现方式,最直观的
def curriedSum(x: Int)(y: Int) = x + y
val onePlus = curriedSum(1)_
onePlus(2)

自定义的控制结构实现需要用到currying的特性

def withPrintWriter(file: File)(op: PrintWriter => Unit) {
  val writer = new PrintWriter(file)
  try {
    op(writer)
  } finally {
    writer.close()
  }
}

val file = new File("date.txt")
withPrintWriter(file) {
  writer => writer.println(new java.util.Date)
}

上面和java 1.7里try with resource的结构非常像
这个代码实现还有个好处,client不需要关注文件是否关闭了,减少代码冗余

接受空参数函数对象的声明
def myAssert(predicate: () => Boolean)
上面这个在调用时必需写成
myAssert(()=>5>3)
需要声明为
def byNameAssert(predicate: => Boolean)
调用时才可以写成
byNameAssert(5>3)


分享到:
评论

相关推荐

    Programming in Scala 2nd Edition

    《Programming in Scala》第二版是一本全面详尽的Scala编程指南,由Scala语言的主要设计者Martin Odersky、Lex Spoon和Bill Venners共同撰写。本书是为Scala 2.8版本更新的,因此包含了最新的特性和技术改进。 ####...

    Programming in Scala 2nd Edition.pdf

    《Programming in Scala 2nd Edition》是一本深入探讨Scala编程语言的权威著作,由Martin Odersky、Lex Spoon和Bill Venners共同撰写。Scala是一种多范式编程语言,融合了面向对象和函数式编程的概念,旨在提供一种...

    programming in scala 2nd edition

    《Programming in Scala, 2nd Edition》是一本深入浅出的Scala编程语言学习指南。本书由Scala的设计者之一Martin Odersky和其他两位资深的Scala社区贡献者Lex Spoon与Bill Venners共同撰写。本书的第二版已经针对...

    Learning Concurrent Programming in Scala, 2nd Edition.pdf

    Learning Concurrent Programming in Scala, 2nd Edition.pdf 就 有

    Programming In Scala 中文版及英文版

    《Programming In Scala》是一本权威的Scala编程语言教程,它由Martin Odersky(Scala的创造者)、Lex Spoon 和 Bill Venners 共同编写。中文版包含了1到13章的内容,这些章节涵盖了Scala的基础知识和基本应用,适合...

    programming in scala, 3nd edition

    总之,《Programming in Scala》是一本非常有价值的书籍,无论你是初学者还是有经验的程序员,都能从中获得宝贵的知识和技能。通过本书的学习,你可以更好地理解和运用Scala这一强大而优雅的编程语言。

    Learning Concurrent Programming in Scala, 2nd Edition

    Title: Learning Concurrent Programming in Scala, 2nd Edition Author: Aleksandar Prokopec Length: 382 pages Edition: 2nd Revised edition Language: English Publisher: Packt Publishing - ebooks Account ...

    Programming in Scala, 2nd Edition

    《Programming in Scala, 2nd Edition》是一本专注于Scala编程语言的综合指南书籍,该书的第二版针对Scala 2.8版本进行了更新。本书是由Artima出版社出版,主要作者包括Martin Odersky、Lex Spoon以及Bill Venners,...

    Programming-in-Scala-2nd.pdf

    Following David and Steve, I arrived to Scala in the late-middle stage of the language’s history to date. By 2008, Scala had spent five years evolving from its initial release, and had formed around ...

    Functional Programming in Scala

    Its familiar syntax and transparent interoperability with existing Java libraries make Scala a great place to start learning FP., Functional Programming in Scala is a serious tutorial for programmers...

    Programming in Scala 3rd edition英文版+代码

    通过阅读《Programming in Scala》第三版并实践提供的源代码,学习者将能够掌握Scala的核心概念,包括其面向对象和函数式编程的融合、强大的类型系统、模式匹配以及并发处理能力。这将为开发者打开新的编程视角,...

    Programming in Scala.pdf

    《Programming in Scala》是Scala编程语言的一本权威指南,由Martin Odersky、Lex Spoon 和 Bill Venners 合著,被广泛认为是学习Scala的首选教材。这本书深入介绍了Scala语言,涵盖了从基础语法到高级特性的全方位...

    programming in scala(第三版)

    《Programming in Scala》第三版是一本深入探讨Scala编程语言的权威指南,由Martin Odersky、Lex Spoon 和 Bill Venners合著。这本书以高清英文原版的形式呈现,旨在帮助读者全面理解Scala的精髓,无论你是初学者...

    Programming in Scala 3rd 第3版 pdf 0分

    Programming in Scala 3rd 英文pdf

    Programming in scala-3rd.pdf

    《Programming in Scala, Third Edition》是一本关于Scala编程语言的权威指南,由Martin Odersky、Lex Spoon和Bill Venners共同编写。这本书通过详细的解释和实例,为读者提供了一个深入理解Scala语言的机会,包括它...

    Programming.in.Scala.pdf

    《Programming in Scala.pdf》是一本专注于Scala编程语言的书籍。Scala是一种现代的多范式编程语言,专为可扩展性而设计。该书旨在为读者提供深入理解Scala语言的教程。 ### 描述 描述中提及的内容表明,...

    Programming in Scala

    Programming in Scala is the definitive book on Scala, the new language for the Java Platform that blends object-oriented and functional programming concepts into a unique and powerful tool for ...

    function programming in scala 英文原版 scala函数式编程

    英文原版 scala函数式编程 function programming in scala

Global site tag (gtag.js) - Google Analytics