电子书:《scala函数式编程》《scala函数式编程》

电子书:《scala函数式编程》《scala函数式编程》

资源下载
仅限VIP下载,请先
犹豫不决让我们错失一次又一次机会!!!

电子书:《scala函数式编程》《scala函数式编程》

111

内容简介:

scala函数式编程[美] paul chiusano runar bjarnason著王宏江钟伦甫曹静静译電子工掌出版社ishing house of electronics industry北京 beling

内容简介函数式编程越来越多地从学术界走向工业界.很多和人们ri常相关的重要系统背后都有函数式编程的身影.并且比例越来越高。在这种大的趋势下.甚至很多指令式编程语言也受其影响加入了对一些函数式特征的支持.比如ava8终于将 lambda加了进来这本书对想要接触函数式编程.或在实际业务中已经使用函数式但想要系统巩固函数式编程知识的程序员来说.是一本非常有价值的书。它以scaa为载体.涵盖了函数式的基础和高阶特性。尤其里面的一些高阶特性是在其他书籍中极少介绍到的。因而.非常值得亟待解决高并发问题.或大数据领域从业的开发人员学习。original english language edition published by manning publications. usa. copyrighte 2015 by manning publications. simplified chinese-language edition copyright o 2016 bypublishing house of electronics industry. all rights reserved.本书简体中文版专有出版权由 manning publications授予电子工业出版社。未经许可不得以任何方式复制或抄袭本书的任何部分。专有出版权受法律保护。版权贸易合同登记号图字:01-20153996图书在版编目(cp)数据scala函数式编程/(美)基乌萨诺( chiusano.p.).(美)比亚尔纳松( bjarnason.r.)著;王宏江.钟伦甫.曹静静译.一北京:电子工业出版社.20164书名原文: functional programming in scalasbn978-7-121-28330-7.①s…ⅱ.①基…②比…③王…④钟…⑤曹…ⅲ.①java语言-程序设计ⅳ.①tp312中guo版本图书馆cip数据核字(2016)第053663号责任编辑:张春雨印刷:三河市双峰印刷装订有限公司装订:三河市双峰印刷装订有限公司出版发行:电子工业出版社北京市海淀区万寿路173信箱邮编:100036开本:787×9801/16印张:16.75字数:402千版次:2016年4月第1版印次:2016年4月第1次印刷定价:69.00元凡所购买电子工业出版社图书有缺损问题.请向购买书店调换。若书店售缺.请与本社发行部联系.联系及邮购电话010)88254888质量投诉请发邮件至[email protected].盗版侵权举报请发邮件至[email protected]服务热线010)88258888

推荐序1我可能是全中guo程序员圈子里最不适合给《scaa函数式编程》写序的人年前我写过《 scala七大死穴》.算是把scaa批判了一番。前几天我则在准备ghtworks咨询师大会上的讨论话题《没有函数的函数式编程》.又要杯葛函数式编程的样子看起来.我无论对 scala还是对函数式编程.都没什么好评嘛。宏江莫不是疯了.居然要我来写序等等.事情似乎不是这样。最近几年. thought works的客户在越来越多的项目中采用了saa技术栈. thought works也孵化出了若干基于 scala的开源项目。我本人也在这些项目中起到了一些作用。为什么我会做这些“口赚体正直”的事呢?这得从十年前说起。我最早是在c++中开始接触到函数式编程的概念。c+和 scala一样.也是一门多范式语言。c++的标准库和 boost都提供了许多函数式编程的设施。但是.在我职业生涯初期.给我留下深刻印象的函数式编程库要数 boost egg利用 boost egg.你可以写出 my_list filtered( &is_not x) filtered( &is not y)这样的代码你会注意到这种用法和 scala标准库非常相像.它大致相当于 scala的 my list filter(isnotx)filter( is noty).这种 filter的用法.本书第5章中也有讲解。boost egg的另一个特点是“非侵入”.比如上例的 filtered函数.本身并不是 my_list的成员。相反.我们通过重载|运算符给原有的类型添加新功能。这种做法在scaa里面相当于隐式转换.本书第9章中提供的例子正是利用隐式转换.给字符串添加了中缀操作符。虽然 boost egg没能流行起来.但对我个人而言很重要.因为它很大程度塑造了我对代码的品位有趣的是. boost:egg的作者 shunsuke ogame近年来的开源项目.都是些 scala项目.可能这也是因为c++和 scala非常相似的缘故吧另一个对我代码品位影响很大的技术是lua中的协程( coroutine)。lua的作者oberto lerusalimschy把协程称为“单趟延续执行流”( one-shot continuation)。有了协程

推荐序1或者延续执行流.程序员可以手动切换执行流.不再需要编写事件回调函数.而可以编写直接命令式风格代码但不阻塞真正的线程。我的前东家网 易在开发游戏时.会大量使用协程来处理业务逻辑.一个游戏程序内同一时刻会运行成千上万个协程。而在其他不支持协程或者延续执行流的语言中.程序员需要非阻塞或异步编程时.就必须采用层层嵌套回调函数的cps( continuation-passing style)风格。这种风格在逻辑复时.会陷人“回调地狱”( .c.a.l.l.back hell〕)的陷阱.使得代码很难读懂.维护起来很困难scala语言本身并不支持协程或者延续执行流。因此.一般来说.程序员需要非阻塞或异步编程时.就必须使用类似本书第13章“外部作用和io”中介绍的技术.注册回调数或者用 for/yield语句来执行异步操作。如果流程很复杂的话.即使是 for/yield语法仍会陷入回调地狱。我对scaa开源社区的贡献之一是 stateless-future这个库提供了一些宏.实现了延续执行流.可以自动把命令式风格的代码转换成cps风格。通过这种做法.程序员不再需要手写本书13.2节那样的代码了.编写的代码风格更像普通的aa或者php风格.直接像流水账一样描述顺序流程后来.我把这种避免回调函数的思路.推广到了其他用途上。比如.我开发了基于scala js的前端框架 binding. scala。使用 binding. scala的用户.编写普通的html模板.描述视图中的变量绑定关系.而不需要编写高阶函数就能做出交互复杂的网 页而我的另一个开源库eah.则更进一步.支持一切 monad。大多数情况下.使用了each就不需要编写任何高阶函数.我称之为“没有函数的函数式编程”。这意味.本书第11章到第15章的全部内容.你都可以直接编写类似java的命令式语法.而each则自动帮你生成使用 monad的代码总之.我是scaa函数式编程的死对头.我写的 scala库.恰恰是为了避免使用本书中谆谆教导的各种高阶函数。如果你是个ava程序员.想在最短的时间内用 scala开始“搬砖”那么.从实用角度出发.我建议你合上本书.直接用each即可。因为.虽然each最终会生成 monad风格代码.但是.本书中涉及的使用高阶函数的细节.就像汇编语言一样.就算你不知道也照样可以干活不过.如果你是个求道者.追求编程艺术的真理.希望刨根到底.理解函数式编程的内在理论和实现机制.那么本书很适合你这本书绝不轻易放过每个知识点.全书包含有大量习题.要求你自己实现 scala标准库或者 scalar中的既有功能。所以.当你读完本书.做完习题后.虽然你的应用开发能力并不会直接提升.但你会体会到构建函数式语言和框架时的难点和取舍.从而增进你的框架开发和语言设计的能力thought works lead consultant杨博

参考资料1. boost egg2.关于lua中的协程.参见a. l. de moura..n. rodriguez.andr. lerusalimschy. coroutinesin lua. journal of universal computer science. 10(7): 910-925.关于延续执行体的历史.参见 reynolds. john c.(1993).\ the discoveries ofcontinuations(pdf). lisp and symbolic computation 6(3/4): 233-2484.关于 scala异步编程的“回调地狱”问题.参见 business-friendly functionalogramming-part 1: asynchronous operations

#############################################

资源下载
下载价格VIP专享
仅限VIP下载升级VIP
犹豫不决让我们错失一次又一次机会!!!
原文链接:https://1111down.com/223097.html,转载请注明出处

本站开启缓存功能

登入后回任何页面即可登入成功,当前页不显示

没有账号?注册  忘记密码?

社交账号快速登录