知识大全 Java8 和 Scala 中的高阶函数
Posted 函数
篇首语:学习并不等于就是摹仿某些东西,而是掌握技巧和方法。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java8 和 Scala 中的高阶函数相关的知识,希望对你有一定的参考价值。
Java8 和 Scala 中的高阶函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
函数文本最大的优势就是可以像字符串或者对象等其他文本(literal)一样传送它 这种特性为构建高度紧凑和可重用代码提供无限的可能性 我们的第一个高阶函数 当我们将一个函数文本传送给一个方法的时候 我们最主要的是一个接收方法参数的方法(这个确实很绕 _ |||) 这类方法就叫做高阶函数 上文Swing例子中提到的 addActionListener 方法恰好属于这类 我们还可以定义自己的高阶函数来为自己提供许多便利 让我们看一个简单的例子 def measure[T](func:=>T) T val start = System nanoTime() val result = func val elapsed = System nanoTime() start; print( The execution of this call took: %s ns format(elapsed)) result 在这个例子中 我们声明了一个名为measure的方法用来计算这个名为func的函数文本的回调所需要的时间 func 方法的签名(signature)是它不接收任何参数并且返回一个泛型类型T 正如你所看到的 Scala中的函数并不一定需要参数尽管它们能够 而且往往也含有参数 现在我们可以向 measure 方法中传递任何函数文本(或者方法) def myCallback = Thread sleep( ) I just took a poewrnap val result = measure(myCallback) > The execution of this call took: ns 从概念的角度讲我们所做的 就是将计算方法调用时间和实际的运算区分开来 我们构造了两块可以重用 松散耦合 类似于拦截器(interceptor)的代码块(measure和myCallback) 通过高阶函数实现重用 先看一个假设的例子 两个可重用构造略紧耦合 def doWithContact(fileName:String handle:Contact => Unit) Unit = try val contactStr = io Source fromFile(fileName) mkString val contact = AContactParser parse(contactStr) handle(contact) catch case e: IOException => println( couldn t load contact file: + e) case e: ParseException => println( coulnd t parse contact file: + e) doWithContact 方法从文件中读取电子名片之类的联系方式然后将数据提供给一个解析器(parser)将数据转化成为联系领域的对象 然后这个对象被传递给一个函数文本回调 handle doWithContact 方法 很函数文本均返回 Unit 类型 等同于java中的返回void的方法 现在 我们可以定义各种各样的可以传递给 doWithContact 的回调函数 val storeCallback = (c:Contact) => ContactDao save(c) val sendCallback = (c:Contact) => val msgBody = nvert(c) RestService send(msgBody) val bineCallback = (c:Contact) => storeCallback(c) sendCallback(c) doWithContact( custerX vcf storeCallback) doWithContact( custerY vcf sendCallback) doWithContact( custerZ vcf bineCallback) doWithContact( custerZ vcf bineCallback) 回调函数也可以通过内联传递 doWithContact( custerW vcf (c:Contact) => ContactDao save(c)) Java 中的高阶函数 java 中的等效实现看起来十分相似 使用目前的语法建议 public interface Block<T> void apply(T t) public void doWithContact(String fileName Block<Contact> block) try String contacStr = FileUtils readFileToString(new File(fileName)) Contact apply(contact) block apply(contact) catch (IOException e) System out println( cloudn t load contact file: + e getMessage()) catch (ParseException e) System out println( cloudn t parse contact file: + e getMessage()) //usage doWithContact( custerX vcf c > ContactDao save(c) ) 使用高阶函数的益处 正如你见到的 函数帮助我们干净地将对象的创建和处理区分开来 通过这种方法 新的业务逻辑处理对象就可以轻易的添加进来而没有必要同对象创建逻辑相耦合 结果就是 我们通过使用高阶函数来使我们的代码保持DRY(Dont t Repeat Yourself) 因而 程序员可以从一个非常细粒度的代码重用中获得最佳利益 cha138/Article/program/Java/hx/201311/26551相关参考
知识大全 面向Java开发人员的Scala指南: 面向对象的函数编程
面向Java开发人员的Scala指南:面向对象的函数编程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
国家职业资格证书中的高阶技师分哪几类?请具体列举,谢谢!国家职业资格等级分为:初级(五级)、中级(四级)、高阶(三级)、技师(二级)和高阶技师(一级)共五个等级。国家职业标准规定的等级是根据本职业从业
知识大全 面向Java开发人员的Scala指南: Scala和servlet
面向Java开发人员的Scala指南:Scala和servlet 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起
Scala2.10和2.9.2的性能比较 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我已经阅
知识大全 面向Java开发人员的Scala指南: 关于特征和行为
面向Java开发人员的Scala指南:关于特征和行为 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 面向Java开发人员的Scala指南: 包和访问修饰符
面向Java开发人员的Scala指南:包和访问修饰符 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Scala编程指南揭示Scala的本质 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Scala
知识大全 面向Java开发人员的Scala指南: 深入了解Scala并发性 了解 Scala 如何简化并发编
面向Java开发人员的Scala指南:深入了解Scala并发性了解Scala如何简化并发编 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后
Scala代码编写中常见的十大陷阱 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对于支持并发和
知识大全 Java开发者的Scala指南: Scala+Twitter=Scitter
Java开发者的Scala指南:Scala+Twitter=Scitter 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我