C++学习笔记----3、设计专业的C++程序(五)---- 重用既有代码(重用代码还是自己写)

        泛泛而谈,重用代码的规则是比较容易理解的,然而,真要付诸实践,可能还是会犯晕。你怎么能知道什么时候重用代码是合适的,要重用哪些代码?总会有一个平衡点,要依实际情况而定。然而,在重用代码方面还是有一些通用的优劣的:

1、重用代码的优点

重用代码对你和你的项目可以提供巨大的优势:

  • 你可能不知道或者不能够判断什么时候去真正地写你需要的代码。你真的会写代码去处理格式化输出吗?当然不会。这就是你使用标准C++ std::format()或者print()功能的原因。
  • 重用的应用部件不需要设计,使得你的设计更简单。
  • 重用的代码不需要排错。可以认为库代码是没有bug的,因为早已经过了测试与广泛使用。
  • 库处理了更多的错误情况,要比你一开始想到的多得多。在项目的一开始,你可能会忘记隐藏的错误或者极限情况,后来再浪费时间来修改这些问题。重用的库代码已被广泛测试,在你之前已被许多程序员使用过,所以你可以认为它正确处理了大部分错误。
  • 库经常在大量的平台上被测试,不同的硬件,不同的操作系统,操作系统的不同版本,不同的显卡等等;比你自己测试要完整得多。有时候,库包含了在特定平台下使其能够工作的变相的解决方案。
  • 库一般被设计处理各种不正常的用户输入,无效的请求,在当前状态下不合适的请求,一般都会给出合适的错误提示。例如,在数据库中查找不存在的记录,或者读取没有打开的数据库的记录,库都会给出明确的行为。
  • 重用领域专家所写的代码比你自己写该领域的代码要安全得多。例如,除非你是一个安全专家,否则不要尝试去写自己的安全代码。如果程序中需要安全或加密,使用库就好了。许多看起来在代码中很小的细节可能会对整个程序中的安全造成妥协,也可能会对整个系统带来麻烦,如果你搞错的话。
  • 库代码也在不断地提高。如果你重用代码,不需要自己去做这些工作就可以享受到这些提升。实际上,库作者将接口与实现正确划分,通过升级库版本而不需要改变与库的交互就可以获得这些益处。好的升级只改变背后的实现而不会改变接口。

2、重用代码的缺点

        不幸的是,重用代码也有缺点:

  • 当你使用不是自己写的库时,在直接使用之前,必须花时间理解其接口与正确用法。这些额外的时间在一开始会拖慢初始设计与编码,但是好处是将来会节省你的大量时间,因为你需要维护的代码会变少,最终的代码会简单。
  • 自己写的代码,你很明确地知道要干什么,而库代码可能不会提供那么精确的功能。
  • 如果库代码提供了你需要的精确的功能,性能可能又不是你想要的。一般来讲性能可能比较差,对于特定的使用场景可能比较差,或者完全没有特定场景。
  • 使用库代码就像打开了支持问题的潘多拉的盒子,,如果在库中发现了一个bug怎么办?通常情况下,你接触不到源代码,即使你想修改也办不到。如果你早已花了大量时间在学习库接口和使用库方面,你不想放弃,但是你会发现说服库开发者按你的时间表修正bug非常困难。还有,如果你使用的是第三方的库,在你的产品还在使用的时候,其所依赖的库的作者已经不支持了?好好考虑一下这些,如果你拿不到源码的情况下还要不要使用这些库。
  • 除了支持问题之外,还有版权问题,版权声明包括源代码披露,分发费用(常被叫做二进制版权费),作用贡献以及开发版权。在使用库之前需要仔细考察版权声明。例如,有些开源的库要求你的代码也要开源。
  • 重用代码要求信任。你一定要相信写代码的人,假设对方活儿干得不错。有些人喜欢控制项目的方方面面,包括每一行源码。
  • 升级库版本可能会带来问题。升级可能会带来问题,可能对你的产品带来严重的后果。与性能相关的升级可能对特定情形进行了性能优化,但可能恶化你使用的情形。
  • 当你使用只有二进制的库时,升级编译器到新的版本可能会带来问题。只有库提供商的二进制与你的编译器的新版本兼容时才能升级你的编译器。

3、综合起来决定

        到现在为止,你已经很熟悉重用代码的术语、优势、劣势,现在已经做好准备决定是否重用代码。通常情况下,这种决定是很明显的。例如,你想在Windows环境下用C++写一个图形界面的程序,应该作用MFC或者Qt的框架。你可能并不知道如何去写生成图形用户界面的代码,更重要的是,你也不想浪费时间去学习它,在这种情形下使用框架可以节省多少人年的时间啊。

        然而,其它时间这种选择并不明显。例如,你对一个库并不熟悉,而你只是需要一个简单的数据结构,可能就不值得去学习这个库去重用一个你用几天就可以写出来的部件。

        最终,你需要依据自己的需求来定,要衡量自己写代码的时间与需要发现并学习怎么使用库去解决问题的时间,达到一种平衡,仔细考虑在你的特定情形下的优缺点,决定哪种要素对你是最重要的。最后,要记住你总是可以改变主意的,如果你能够好好地处理抽象这个概念的话,这些相对来说都是比较容易的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王俊山IT

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值