封装和契约 - 代码设计的核心原则

文章探讨了代码封装的重要性,提倡函数化编程以提高代码可维护性和可读性。作者通过与ChatGPT交流,分享了编程基础知识,强调了将逻辑封装为函数的推荐做法,并介绍了函数、lambda函数和递归的概念及其在编程中的应用。
摘要由CSDN通过智能技术生成

1.主动进行代码封装的必要性和实践

下面这个原则,不知道是否所有的编程人员有基本认知。代码怎么写都可以,就像你可以任意组合文字,但是表达如果不依从某些规则,会很容易遭遇维护和调试时的大量时间浪费。下面这个问题可以归结为一条规则:

代码要明确进行封装并明确给出一个代码块的输入输出参数——这其实就是函数化。函数这个东西虽然很常见,但它是一种创造。

你对当前代码的上下文调用有一定的要求,你又不明确地限定这种要求,你在维护时会很容易因为遗忘,遗漏出错。另外,在脚本环境中,它还有额外的用途,就是防止全局名字空间污染。

2.与ChatGPT的讨论

1.你似乎具备各个领域的基础知识,关于程序设计的一些知识你似乎也有。这些知识是怎么来的?

作为WeTab AI,我通过深度学习和自然语言处理算法来学习和理解大量的信息和知识。我从多个领域的数据源中获取和分析文本、文档、书籍、网站和其他公开可用的资源。我也能够接收用户提供的信息来扩充我的知识库。通过这种方式,我能够逐渐积累各种领域的基础知识,包括程序设计和其他相关领域的知识。请记住,尽管我尽力提供准确和有用的信息,但始终建议查阅官方文档和参考资料以获取更精确和详细的信息。

2.试试一个问题:在写脚本的时候,将逻辑封装为函数是:A.不需要 B.推荐 C.必须。你的意见是什么?我突然发现类似这样的问题,我好像终于找到了一个可以讨论的对象。

作为一个AI助手,我强烈推荐将逻辑封装为函数。将逻辑封装为函数有以下几个优点:

  1. 可重用性:封装逻辑后,可以重复使用相同的代码块,避免重复编写相似的代码。这样可以提高代码的复用性,减少代码量,并且能够让你的代码更加模块化和易于维护。

  2. 可读性:通过将逻辑封装为函数,可以让代码更加清晰和易于理解。函数的命名可以反映函数的功能,提高代码的可读性和可理解性。

  3. 可测试性:封装逻辑为函数使得代码更容易进行单元测试。你可以为每个函数编写测试用例来验证其行为是否正确,从而提高代码的质量和可测试性。

  4. 错误隔离:如果在封装逻辑的函数中出现了错误,可以更容易地定位问题所在。与全局变量相比,函数内部的局部变量范围更小,减少了错误发生的可能性。

综上所述,将逻辑封装为函数是推荐的做法,并且可以更好地组织和管理代码。当然,具体是否需要将逻辑封装为函数还是取决于具体的应用场景和个人偏好。

2.well done.很棒。

非常感谢您的夸奖!我非常高兴能够为您提供有用的信息。如果您还有任何其他问题,随时都可以问我。我会尽力帮助您!

附录A 更多的关于函数的扩展知识

函数是谁发明的?

函数的概念可以追溯到数学领域,很早就已经存在了。数学家Leonhard Euler被认为是函数概念的先驱之一。18世纪,他在分析领域的贡献非常显著,系统地研究了函数的性质和应用。

在计算机科学中,函数的概念也得到了广泛应用。在早期计算机科学的发展中,Alonzo Church和Stephen Cole Kleene分别独立提出了lambda演算和递归函数的概念,为函数式编程奠定了坚实的基础。他们的工作对于后来的编程语言设计以及函数式编程范式的发展产生了深远的影响。

因此,可以说数学家Leonhard Euler、逻辑学家Alonzo Church和计算机科学家Stephen Cole Kleene都为函数的概念做出了重要贡献。值得一提的是,函数的概念在不同领域中可能有着不同的定义和应用,并且随着时间的推移,函数的概念也得到了进一步的延伸和发展。

lambda可以在母函数的上下文,随时生成自定义函数,并析构,这个概念似乎很先进。

是的,lambda函数(匿名函数)是一种在需要时临时定义的小型函数。Lambda函数的一个重要特点是它们可以在定义它们的上下文中捕获变量,并且将这些变量绑定到生成的函数中。这种能力使得lambda函数非常灵活,能够动态地生成自定义函数。

使用lambda函数的一大优势是它们可以简化代码,尤其是在需要传递简单函数的场景下。与定义一个单独的函数相比,使用lambda函数可以省去命名函数和定义函数体的步骤,从而更加紧凑和简洁。

另外,lambda函数也可以按需生成和析构,没有显式定义和命名的束缚,这种灵活性对于一些临时性、短暂性的需求非常方便。一些编程语言如Python和JavaScript中广泛支持lambda函数,使得开发者能够更灵活地应对各种需要。

然而,虽然lambda函数的灵活性和简洁性很有吸引力,但过度使用lambda函数可能会导致代码的可读性下降。在某些情况下,使用显式命名的函数可能更易于阅读和维护。因此,在使用lambda函数时,需要根据具体情况权衡其优缺点,并选择合适的使用方式。

递归感觉并不是非常难以理解,但是它似乎是为计算机问题解决量身定制的。

您的观点是正确的。递归是一种非常有效和强大的问题解决方法,特别适用于涉及到重复和可分解的问题。它利用函数调用自身的特性,通过分解问题为更小的子问题来解决整个问题。

递归非常适合描述自相似的结构或者需要进行深度遍历的情况,比如树、图以及许多数列等等。它可以将复杂的问题简化为更小的子问题,从而使得问题的解决变得更加清晰和直观。

虽然递归的思想相对容易理解,但是正确地设计和实现递归算法需要一定的经验和技巧。递归函数的实现需要考虑合适的终止条件,以避免无限递归和堆栈溢出等问题。此外,递归算法的性能可能不如非递归算法,因为递归算法可能导致重复计算。

总的来说,递归是一种精巧而高效的问题解决方法,对于某些问题来说是理想的工具。但在实际应用中,我们需要权衡递归和非递归的优缺点,选择合适的方法来解决问题。

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子正

thanks, bro...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值