返回首页
苏宁会员
购物车 0
易付宝
手机苏宁

服务体验

店铺评分与同行业相比

用户评价:----

物流时效:----

售后服务:----

  • 服务承诺: 正品保障
  • 公司名称:
  • 所 在 地:
本店所有商品

  • 全新C++函数式编程(塞尔)伊凡·库奇(Ivan Cukic)9787111641988
  • 正版
    • 作者: (塞尔)伊凡·库奇(Ivan Cukic)著 | (塞尔)伊凡·库奇(Ivan Cukic)编 | (塞尔)伊凡·库奇(Ivan Cukic)译 | (塞尔)伊凡·库奇(Ivan Cukic)绘
    • 出版社: 机械工业出版社
    • 出版时间:2020-01-01
    送至
  • 由""直接销售和发货,并提供售后服务
  • 加入购物车 购买电子书
    服务

    看了又看

    商品预定流程:

    查看大图
    /
    ×

    苏宁商家

    商家:
    萌萌哒图书专营店
    联系:
    • 商品

    • 服务

    • 物流

    搜索店内商品

    商品分类

    商品参数
    • 作者: (塞尔)伊凡·库奇(Ivan Cukic)著| (塞尔)伊凡·库奇(Ivan Cukic)编| (塞尔)伊凡·库奇(Ivan Cukic)译| (塞尔)伊凡·库奇(Ivan Cukic)绘
    • 出版社:机械工业出版社
    • 出版时间:2020-01-01
    • 版次:1
    • 印次:1
    • 字数:427000
    • 页数:262
    • 开本:16开
    • ISBN:9787111641988
    • 版权提供:机械工业出版社
    • 作者:(塞尔)伊凡·库奇(Ivan Cukic)
    • 著:(塞尔)伊凡·库奇(Ivan Cukic)
    • 装帧:平装
    • 印次:1
    • 定价:99.00
    • ISBN:9787111641988
    • 出版社:机械工业出版社
    • 开本:16开
    • 印刷时间:暂无
    • 语种:暂无
    • 出版时间:2020-01-01
    • 页数:262
    • 外部编号:1202000500
    • 版次:1
    • 成品尺寸:暂无

    译者序

    致谢

    前言

    关于本书

    关于作者

    章函数式编程简介

    1.1什么是函数式编程?

    1.1.1与面向对象编程的关系

    1.1.2命令式与声明式编程的比较

    1.2纯函数(Pure functions)

    1.2.1避免可变状态

    1.3以函数方式思考问题

    1.4函数式编程的优点

    1.4.1代码简洁易读

    1.4.2并发和同步

    1.4.3持续优化

    1.5C++作为函数式编程语言的进化

    1.6将会学到什么

    总结

    第2章函数式编程之旅

    2.1函数使用函数?

    2.2STL实例

    2.2.1求平均值

    2.2.2折叠(Folding)

    2..删除字符串空白符

    2.2.4基于谓词分割集合

    2.2.5过滤(Filtering)和转换(Transforming)

    .STL算法的可组合

    2.4编写自己的高阶函数

    2.4.1接收函数作为参数

    2.4.2用循环实现

    2.4.3递归(Recursion)和尾调用优化(Tail-call optimization)

    2.4.4使用折叠实现

    总结

    第3章函数对象

    3.1函数和函数对象

    3.1.1自动推断返回值类型

    3.1.2函数指针

    3.1.3调用操作符重载

    3.1.4创建通用函数对象

    3.2lambda和闭包(Closure)

    3.2.1lambda语法

    3.2.2lambda详解

    3..在lambda中创建任意成员变量

    3.2.4通用lambda表达式

    3.3编写比lambda更简洁的函数对象

    3.3.1STL中的操作符函数对象

    3.3.2库中的操作符函数对象

    3.4用std::function包装函数对象

    总结

    第4章以旧函数创建新函数

    4.1偏函数应用

    4.1.1把二元函数转换成一元函数的通用方法

    4.1.2使用std::bind绑定值到特定的函数参数

    4.1.3二元函数参数的反转

    4.1.4对多参数函数使用std::bind

    4.1.5使用lambda替代std::bind

    4.2柯里化(Currying):看待函数不同的方式

    4.2.1创建柯里化函数的简单方法

    4.2.2数据库访问柯里化

    4..柯里化与偏函数应用

    4.3函数组合

    4.4函数提升(复习)

    4.4.1键值对列表反转

    总结

    第5章纯洁:避可变状态

    5.1可变状态带来的问题

    5.2纯函数和引用透明

    5.3无副作用编程

    5.4并发环境中的可变状态与不可变状态

    5.5const的重要

    5.5.1逻辑const与内部const

    5.5.2对于临时值优化成员函数

    5.5.3const的缺陷

    总结

    第6章惰求值

    6.1C++的惰

    6.2惰作为一种优化技术

    6.2.1集合惰排序

    6.2.2用户接口中的列表视图

    6..通过缓存函数结果修剪递归树

    6.2.4动态编程作为惰形式

    6.3通用记忆化(Generalized memoization)

    6.4表达式模板与惰字符串拼接

    6.4.1纯洁与表达式模板

    总结

    第7章range

    7.1range简介

    7.2创建数据的只读视图

    7.2.1range的filter函数

    7.2.2range的transform函数

    7..range惰求值

    7.3修改range中的值

    7.4定界rang和range

    7.4.1用定界range优化用于输入的range

    7.4.2用哨兵创建range

    7.5用range统计词频

    总结

    第8章函数式数据结构

    8.1不可变链表(Immutable linked lists)

    8.1.1在表头添加和删除元素

    8.1.2在链表末尾添加和删除元素

    8.1.3在链表中间添加和删除元素

    8.1.4内存管理

    8.2不可变类向量结构

    8.2.1位图向量树中的元素查找

    8.2.2向位图向量树追加元素

    8..位图向量树的修改

    8.2.4在位图向量树的末尾删除元素

    8.2.5操作和位图向量树的整体效率

    总结

    第9章代数数据类型及模式匹配

    9.1代数数据类型

    9.1.1通过继承实现和类型

    9.1.2通过union和std::variant实现和类型

    9.1.3特定状态的实现

    9.1.4特殊的和类型:Optional

    9.1.5和类型用于错误处理

    9.2使用代数数据类型进行域建模

    9.2.1原始的方法及其缺点

    9.2.2更复杂的方法:自上而下的设计

    9.3使用模式匹配更好地处理代数数据类型

    9.4Mach7的强大匹配功能

    总结

    0章monad

    10.1仿函数并不是以前的仿函数

    10.1.1处理可选值

    10.2monad:更强大的仿函数

    10.3基本的例子

    10.4range与monad的嵌套使用

    10.5错误处理

    10.5.1std::optional作为monad

    10.5.2expected作为monad

    10.5.3trymonad

    10.6monad状态处理

    10.7并发和延续monad

    10.7.1future作为monad

    10.7.2future的实现

    10.8monad组合

    总结

    1章模板元编程

    11.1编译时操作类型

    11.1.1推断类型调试

    11.1.2编译时的模式匹配

    11.1.3提供类型的元信息

    11.2编译时检查类型的属

    11.3构造科里化函数

    11.3.1调用所有可调用的

    11.4DSL构建块

    总结

    2章并发系统的函数式设计

    12.1Actor模型:组件思想

    12.2创建简单的消息源

    1.将反应流建模为monad

    1..1创建宿(Sink)接收消息

    1..2转换反应流

    1..创建给定值的流

    1..4连接流

    12.4过滤反应流

    12.5反应流的错误处理

    12.6响应客户端

    12.7创建状态可修改的Actor

    12.8用Actor编写分布式系统

    总结

    3章测试与调试

    13.1程序编译正确吗?

    13.2单元测试与纯函数

    13.3自动产生测试

    13.3.1产生测试用例

    13.3.2基于规则的测试

    13.3.3比较测试

    13.4测试基于monad的并发系统

    总结

    伊凡·库奇(Ivan Cukic),在贝尔格莱德数学系教授现代C++技术和函数式编程。他从1998年开始使用C++。在以前和攻读博士时研究函数式编程,他应用函数式编程技术编写了优选数亿人使用的真实项目。Ivan是KDE的核心开发人员,KDE是优选的开源C++项目。

    编程是一门罕见的学科,通过它可以从无到有地创建一些东西。编程可以根据自己的意志创建想要的东西,专享需要的就是一台电脑。我在上学的时候,大部分的编程课集中于命令式编程——首先是面向过程的C 语言,然后是面向对象编程的C++和Java。在我的大学里情况也没有太大的改变——主要的编程思想还是面向对象的编程(OOP)。在这段时间,几乎使我认为所有的语言在概念上都是相同的——只不过语法不同,在学了种语言的基础之后,如循环和分支,通过很小的调整就可以编写程序。次接触函数式编程语言是在大学中,在课堂上学习了Lisp 语言。我的直觉反应是使用Lisp 来模拟if-then-else 语句和for 循环,这样可以真正使它变得有用。不是使我的认识适合语言,却决定使语言适合我的想法,以便用C 的方式编程。我只想说那时候,没有看到函数式编程的任何意义——Lisp 可以做的,用C 语言就可以实现,而且更加简单。经过相当长的时间我才开始研究函数式编程。这么做的根本原因是,在某些项目中使用的语言发展太慢了。语言中添加了for-each 循环,就像什么了不起的东西:只需要下载新的编译器,就可以使编程生涯更轻松了。这让我陷入深思。为了得到诸如for-each 循环的新语言结构,必须等待语言的新版本和新的编译器。但在Lisp 中,却可以使用一个简单的函数实现for 循环相同的功能,根本不需要升级编译器。这正是我学函数编程的原因:无须改变编译器就可以扩展编程语言的能力。编程思想仍然是“面向对象”的,但却学着用函数式风格的结构简化面向对象代码的工作。我开始投入大量的时间研究函数式编程语言,如Haskell、Scala 和Erlang。我惊奇地发现,使面向对象程序员头痛不已的问题,换个角度——以函数式风格思考——就迎刃而解了。我的工作主要使用C++,所以必须寻找一种方式用C++进行函数式编程。事实明,这样的人并非只有我一个,世界上到处都是具有类似想法的人。很荣幸在各大会议上遇到他们。这是交流思想、学习新的东西、交流C++函数式编程经验的不错机会。大多数这样的会议结束的时候都有一个共同的结论:如果有人写一本C++函数式编程的书,那就太棒了。但问题是,所有人都让别人来写,因为我们都需要从实际项目中寻找思想的源泉。当Manning 出版社找到我写这本书时,我起初是犹豫的——我宁愿读这样的一本书,而不愿意去写。但我意识到,如果每个人都是这样的想法,将不会有C++函数式编程的书了。我决定接受邀请,并开始了著书的旅程,于是就有了你看到的这本书。

    售后保障

    最近浏览

    猜你喜欢

    该商品在当前城市正在进行 促销

    注:参加抢购将不再享受其他优惠活动

    x
    您已成功将商品加入收藏夹

    查看我的收藏夹

    确定

    非常抱歉,您前期未参加预订活动,
    无法支付尾款哦!

    关闭

    抱歉,您暂无任性付资格

    此时为正式期SUPER会员专享抢购期,普通会员暂不可抢购