《函数式设计:原则、模式与实践》随笔.docxVIP

《函数式设计:原则、模式与实践》随笔.docx

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

《函数式设计:原则、模式与实践》读书笔记

1.函数式设计原则

a)单一职责原则(SRP):一个函数应该只负责一个任务,这样可以降低代码的复杂度和出错的可能性。

b)数据不可变性原则(IIP):在函数式设计中,数据应该是不可变的,这意味着一旦数据被创建,就不应该被修改。这有助于提高代码的安全性和可预测性。

c)高阶函数原则:使用高阶函数(如map、reduce、filter等)来处理数据集合,而不是直接操作数据。这样可以将复杂的问题分解为简单的步骤,并使代码更易于理解和维护。

d)依赖倒置原则(DIP):依赖关系应该从高层模块传递到底层模块,而不应该反过来。这意味着高层模块不应该依赖于低层模块的具体实现细节,而低层模块应该依赖于高层模块提供的接口。这样可以降低模块之间的耦合度,提高系统的可扩展性和可替换性。

e)无副作用原则:函数应该避免修改其外部状态,除非有明确的理由这样做。这有助于确保函数的行为是确定性的,并且可以在并行执行时正确地工作。

1.1单一职责原则

在函数式编程中,单一职责原则是一种非常重要的设计理念。它指的是每个函数应该只做一件事,并且只做得好。这与传统面向对象编程中的单一职责原则有所不同,但核心理念是一致的,即追求代码的简洁性和可维护性。

无副作用:函数式编程鼓励编写无状态的、无副作用的函数。这意味着一个函数在接收到相同的输入时,应该总是产生相同的输出,而不受外部状态或环境的影响。这样的函数具有可预测性和可重复性,易于测试和调试。

高内聚性:遵循单一职责原则的函数通常具有高度的内聚性,即它们专注于一个特定的任务或操作。这样的设计使得代码更加模块化,每个函数都在其职责范围内发挥最大的作用。

避免全局状态和共享状态:在函数式编程中,全局状态和共享状态是被避免的。这意味着每个函数都应该在其本地范围内完成其工作,而不依赖于外部状态或全局变量。这种设计有助于保持函数的独立性和可测试性。

模块化设计:通过遵循单一职责原则,我们可以将复杂的系统分解为更小、更简单的模块或函数。每个模块都有一个明确的责任和任务,这样的设计使得代码更加清晰、易于理解和维护。

强调函数组合和纯函数:纯函数是一种特殊类型的函数,其返回值仅取决于输入参数,并且没有任何副作用。在函数式编程中,我们鼓励使用纯函数并利用函数组合来实现复杂的功能。每个函数都在其职责范围内完成其特定的任务,并通过组合与其他函数协同工作。

单一职责原则是函数式编程中的一个核心原则,它鼓励我们编写简洁、可预测、可重复使用的函数,这对于构建健壮、可维护的软件系统至关重要。通过遵循这一原则,我们可以更好地组织和管理代码,提高代码的质量和效率。

1.2开放封闭原则

在软件工程中,开放封闭原则(OpenClosedPrinciple,OCP)是面向对象设计的核心原则之一。该原则由RobertC.Martin提出,并在他的著作《代码大全》中得到了详细的阐述。

开放封闭原则的核心思想是:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这意味着当需要添加新功能或行为时,我们应该通过扩展现有代码来实现,而不是修改现有代码。这样做的好处是:

减少代码冗余:由于新功能是通过扩展现有代码得到的,因此不会引入重复的代码。

提高代码质量:修改现有代码往往比重新编写新代码更容易出错,而扩展现有代码则可以避免这种风险。

降低维护成本:由于新功能的添加是通过修改现有代码实现的,因此不需要对整个系统进行大规模的测试和调试。

抽象化:将公共功能抽象为独立的组件或模块,以便在不修改这些组件的情况下添加新功能。

接口隔离:定义清晰的接口,使得不同的模块可以通过这些接口进行交互,而不需要了解对方的具体实现细节。

依赖倒置原则:依赖于抽象而不是具体实现,这样可以在不修改依赖项的情况下更改实现。

开放封闭原则鼓励我们编写可扩展、可维护和可重用的代码,从而提高软件的质量和可维护性。

1.3里氏替换原则

在《函数式设计:原则、模式与实践》作者提到了里氏替换原则(LiskovSubstitutionPrinciple,LSP),这是一种关于类和对象之间继承关系的基本原则。里氏替换原则的核心思想是:如果一个程序使用基类的指针或引用来操作派生类的对象,那么在这个程序中,基类和派生类可以互换,而不会导致任何错误。子类对象可以被当作父类对象来使用,而不会因为继承关系的改变而导致程序出错。

基类定义的成员函数应该能够在派生类中被重新定义而不影响原有的功能。这意味着派生类可以重写基类的成员函数,但不能删除或修改它们。

基类指针或引用可以指向派生类对象。这意味着在使用基类指针或引用的地方,可以直接用派生类对象替换,而不会影响程序的正确性。

基类析构函数应该能够正确地释放从基类继承而来的资源。这意味着在基类析构函数中,

文档评论(0)

lgcwk + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档