编辑推荐
《C#函数式程序设计:经典编程技术在现代项目中的应用》提供了众多的不同类型实例,这些实例结合了多个方法解决不同领域里的问题。既包括了并行计算和高性能计算等复杂的问题,也包括了Web服务和尚业逻辑实现等简单的用例。本书希望帮助程序员在C#语言里找到问题的解决方案,并向读者介绍C#函数式编程的优点和缺点。本书的主要目的是帮助程序员最大限度地利用已知的程序设计技术。
内容简介
《C#函数式程序设计:经典编程技术在现代项目中的应用》绝大部分例子通过微软.NET平台上的C# 4.0语言来实现。少数几个例子采用其他语言,但是它们只是起演示作用。如果读者想测试这些例子,但是当前使用的并不是C# 4.0或 Visual Studi0 2010版本,则用C# 3.0或Visual Studi0 2008也能得到同样的效果—在C# 4.0中,新增加的功能并不是很多,而且这些功能都没有应用到例子中。但是,有几个例子利用了.NET Framework的功能(如Parallel Extensions),这些功能只出现在.NET 4.0中。
《C#函数式程序设计:经典编程技术在现代项目中的应用》介绍函数式程序设计的基本概念,以及如何把这些概念应用到C#语言中。作者尽量提供具有实用背景的示例,但是大多数例子只考虑到语言因素。函数式程序设计是一种与代码、算法和程序结构有关的技术——这一点不同于程序的体系结构。当然,它需要与程序的体系结构相兼容。须知,有时很难在太理论化与偏离重点之间做到理想的平衡,但是作者已尽了最大的努力。
在编写《C#函数式程序设计:经典编程技术在现代项目中的应用》时,作者专门开发了一个函数式的辅助代码库,即FCSlib(Functional CSharp Library)。读者在自己的项目中可以随意使用这个库,但是需要指出的是,该库无法提供任何保证。包含这个库代码的下载文件(有关下载文件的更多信息,请参阅“源代码”一节的内容)中还包括一个应用于FCSlib代码的LGPL许可文件。
作者简介
Oliver Sturm有20多年的专业软件开发经验。他是应用程序体系结构、程序设计语言和DevExpress开发的第三方NET工具等多个领域的专家。自2002年开始,他的主要兴趣在于NET平台。Oliver曾在许多国际会议上发表过演说,编写了20多个培训课程,并在杂志上用英语和德语发表了100多篇文章。他也曾从事计算机基础编程教学15年之久。由于他对NET社区所做的贡献,因此多次获得微软英国最佳C#程序员称号。
以苏格兰为据点,Oliver主要从事自由咨询师和培训师的工作,同时还是国际咨询公司thinktecture的顾问。
吴文国,博士,温州大学物理与电子信息学院副教授。其研究方向是计算机图形学和地球物理及探测技术,主要从事面向对象程序设计、数据结构等基础课程的教学工作。他工作之余还从事软件开发和翻译工作,已翻译出版了《交互式计算机图形学——基于OpenGL的自顶向下方法(第4版)》、《UNIX原理与应用(第4版)》等10多本计算机图书。另外,他还在《计算机辅助设计与图形学学报》、《中国物理快报》、《电子学报》等杂志上发表过多篇文章。
内页插图
目录
第Ⅰ部分 函数式程序设计引言
第1章 函数式程序设计简史
1.1 函数式程序设计简介
1.2 函数式程序设计语言
1.3 与面向对象程序设计的关系
1.4 小结
第2章 函数式程序设计思想在现代项目中的应用
2.1 控制副作用
2.2 敏捷开发方法
2.3 声明式程序设计
2.4 函数式程序设计的定向思维
2.5 用C#实现函数式程序设计的可行性
2.6 小结
第Ⅱ部分 C#函数式程序设计基础
第3章 函数、委托和Lambda表达式
3.1 函数与方法
3.2 重用函数
3.3 匿名函数与Lambda表达式
3.4 扩展方法
3.5 引用透明
3.6 小结
第4章 泛型
4.1 泛型函数
4.2 泛型类
4.3 约束类型
4.4 其他泛型类型
4.5 协变与逆变
4.6 小结
第5章 惰性列表工具——迭代器
5.1 什么是惰性
5.2 用.NET方法枚举元素
5.3 迭代器函数的实现
5.4 链式迭代器
5.5 小结
第6章 用闭包封装数据
6.1 动态创建函数
6.2 作用域存在的问题
6.3 闭包的工作机制
6.4 小结
第7章 代码即数据
7.1 .NET中的表达式树
7.2 分析表达式
7.3 生成表达式
7.4 .NET 4.0特性
7.5 小结
第Ⅲ部分 用C#实现常用的函数式设计技术
第8章 局部套用与部分应用
8.1 参数的解耦
8.1.1 手动局部套用
8.1.2 自动局部套用
8.1.3 调用局部套用函数
8.1.4 类上下文
8.1.5 FCSlib库的内容
8.2 调用函数的各部分
8.3 参数顺序的重要性
8.4 小结
第9章 惰性求值
9.1 惰性求值的优点
9.2 传递函数
9.3 显式的惰性求值
9.4 惰性求值方法的比较
9.4.1 可用性
9.4.2 效率
9.5 惰性求值方法的选择
9.6 小结
第10章 缓存技术
10.1 记住以前结果的重要性
10.2 预计算
10.3 缓存
10.3.1 深度缓存
10.3.2 缓存的几个考虑因素
10.4 小结
第11章 递归调用
11.1 C#中的递归
11.2 尾递归
11.3 累加器传递模式
11.4 后继传递模式
11.5 间接递归
11.6 小结
第12章 标准高阶函数
12.1 应用运算:Map
12.2 使用筛选条件:Filter
12.3 累加操作:Fold
12.4 LINQ中的Map、Filter和Fold
12.5 标准高阶函数
12.6 小结
第13章 序列
13.1 何为列表推导
13.2 用函数方法实现迭代器
13.3 值域
13.4 限制
13.5 小结
第14章 由函数构建函数
14.1 组合函数
14.2 高级的部分应用
14.3 各种方法的综合
14.4 小结
第15章 可选值
15.1 空值的含义
15.2 可选值的实现
15.3 小结
第16章 防止数据变化
16.1 变化不总是件好事
16.2 错误的假定
16.2.1 静态数据受欢迎
16.2.2 深度问题
16.2.3 克隆
16.2.4 自动克隆
16.3 实现不可变容器数据类型
16.3.1 链表
16.3.2 队列
16.3.3 非平衡的二叉树
16.3.4 红黑树
16.4 持久数据类型的替代选择
16.5 小结
……
第Ⅳ部分 函数式设计的实际应用
精彩书摘
3.5 引用透明
在指令式程序设计中,编写一个计算机程序意味着定义一个为实现某个具体目标而需要的操作序列。在这个序列中,需要定义状态和状态的转换-A状态如何转换到B状态,A状态和B状态的具体内容,以及什么时候从A状态转换为B状态。当人们说指令式程序设计都是与状态有关时,就是指这个意思。
从理论上讲,一个序列程序可以逐行编写,程序的执行过程是从顶部到底部并在底部结束。实际上,即使在CPU级,也总是有工具提高程序设计的效率。程序设计语言提供了函数、方法以及其他模块,这些都可以用来增加问题的抽象性。在指令式程序设计中,这些模块的基本作用是防止代码重复,把代码分解成更容易管理的函数级模块。指令式程序设计的最大问题之一是随着时间的推移,模块会变得越来越大。这在代码库中情况尤为突出。
由于指令式程序设计把重点放在执行序列上,因此函数和方法的引用总是不透明的。
这是指,即使用相同的一组输入参数(或者没有参数)调用函数,也无法保证每次都得到相同的结果。函数的实现经常要用更大作用域中的变量(例如类级别的字段),这些变量通常称为全局变量。正如前面虚构的由无数行代码组成的无穷序列例子中一样,选取的函数和方法必须按某个特定顺序进行调用,这样它们之外的状态才会与它们的算法相符。
引用透明正好与此相反。这个术语可以应用于任何表达式,它可表示这样的意思:表达式可以用表达式的值取代而不会影响程序,也就是不会影响使用此替换操作的算法的最终结果。
在数学上,表达式总是引用透明的,很容易找到这方面的例子。例如,在任何数学情形下,表达式3+2都可以用5来代替,而且不会改变其本意。遗憾的是,在计算机程序设计中,情况并非都如此。
……
前言/序言
函数式设计是一种重要的程序设计模式,它可以追溯到很久之前。函数式程序设计总是与教授程序设计的人们有关。函数式程序设计的整洁而富有逻辑的概念是它特别适合于教学的重要原因。广泛使用计算机和自己设计程序的行业也发现函数式程序设计是实现其目标最有效的办法。然而,在许多所谓的“主流”软件公司看来,函数式程序设计一直以来只具有学术研究价值,他们普遍选择传统的指令式设计方法,如面向对象等。最近几年,在.NET平台上把越来越多的函数式成分增加到指令式语言中。在VisualStudio2010中增加了F#语言,它是用微软主流开发平台开发的第一个混合的函数式语言。甚至有更多的函数式功能被引入到C#和VB.NET中,这说明了微软公司对函数式设计的认同。
本书读者对象
C#函数式设计这个主题可以从两个不同的角度来讨论。很多有经验的程序员和开发团队谙熟.NET平台,他们一直用C#或VB.NET语言(有时甚至用C++)为.NET平台开发软件。如果读者具有这样的经验,则有很多理由需要深入研究函数式设计:它是一个整洁的、易于维护的设计模式,正如我们所了解的,它是程序设计的一个重要基础。某些特殊的情形(如并行化)借助于函教数式程序设计的思想很容易实现。
另一方面,读者也许不是.NET程序员,但在一个或多个传统函数式语言上有相当丰富的经验,需要与C#程序员合作开发软件,或者想自己使用函数式语言。本书将帮助读者理解如何在C#语言中使用自己熟悉的方法,当需要向没有函数式设计背景的开发团队解释这些思想时,这也许可以提供一个宝贵的起点。
……
C#函数式程序设计:经典编程技术在现代项目中的应用 [Functional Programming in C#:Classic Programming Techniques for Modern Pr 下载 mobi epub pdf txt 电子书 格式
C#函数式程序设计:经典编程技术在现代项目中的应用 [Functional Programming in C#:Classic Programming Techniques for Modern Pr 下载 mobi pdf epub txt 电子书 格式 2024
C#函数式程序设计:经典编程技术在现代项目中的应用 [Functional Programming in C#:Classic Programming Techniques for Modern Pr mobi epub pdf txt 电子书 格式下载 2024