学编程 复制粘贴 害死人

复制粘贴不好

我们讨厌复制粘贴。 为什么? 因为结果代码无法维护。 我收到了质量检查报告的错误,我分析了代码,看了日志,调试了,喝了很多咖啡,最后我得到了代码的根本原因。 我修复了该问题,测试了用例,发布了新代码,以了解第二天在相似的用例中会出现一个非常相似的错误。 在这种情况下,另一种代码看起来与我前一天要修补的代码非常相似,而我只是开始怀疑我将要面对并必须更改同一代码的更多副本。

有比复制粘贴更糟糕的事情

现在想象一下像电影中那样的短发。 让我们跳到另一个时间。 我收到了质量检查报告的错误,并分析了代码。 我不明白。 有很多小型接口,抽象类,深层次结构。 许多课程与业务没有直接关系。 我向创建代码的开发人员寻求帮助,他开始解释。 在两天内,我开始理解他的编码结构思想,以及他如何以严格的面向对象的方式实现代码,从而避免了丝毫的复制/粘贴。 三天后,我找到了必须修改一行的地方。 在此之前,我计划先创建失败的单元测试,然后修复代码并重新运行单元测试,以确保不再发生相同的错误。 因此,我打开了将要修改的单元测试类,但我不了解它的工作方式。 它很复杂,并且扩展了另一个使用另一个类的类。 这一次比较容易理解,因为我已经了解了创建它的程序员的心态,但是创建新测试仍然是一整天。 在错误报告客户如虎添翼地寻求修复之后,我们已经进入了第4天。

要复制还是不复制...

哪种方法更好? 是否有一些复制粘贴并面对一些错误,这些错误只会出现在其他区域,或者在代码中具有极其严格但很深入的OO设计,从而避免了错误的再次出现,但学习曲线陡峭?

这个问题没有答案,只有一个最好的答案。 它们都不是一个好方法。 有时,一些复制粘贴可能是可以原谅的罪过。 深层的继承结构很难理解。 通常建议不要超过三个级别。 可能还会有人争辩说,在以上示例中,可以在没有实际复制粘贴的情况下以较少的继承级别创建代码。 (除了以上内容不是实际的,而是从多年经验中总结出来的虚构示例。)重复的级别可能与OO结构冲突。 当您具有OO结构时,就可以进行抽象。 抽象代码很难理解。 当您复制,粘贴,修改时,修改后的代码将与您复制的代码处于同一抽象级别。 可能更容易理解。

复制单元测试代码

当涉及单元测试时,我倾向于原谅复制粘贴和冗长的内容,以获得更简单的结构和可读性。 但这是因为单元测试比文档更多的是文档。 当您立即查看时,它们必须具有表现力。 不需要调查和理解其他地方定义的代码结构即可了解测试的目的。 我倾向于同意单元测试,即复制一个测试,然后包含稍作修改的代码。 它仍然具有维护方面的缺点之一:如果更改代码,则更改必须传播到所有其他复制代码的地方。 但是在这种情况下,如果您忘记传播更改,则将得到测试错误或失败。 这样,您就可以将复制粘贴视为一个优势:更改代码时,您不得不查看,重构和考虑所有受影响的测试用例。

不要复制生产代码

在单元测试代码可能使生产代码变成噩梦的情况下,这些使缺点变成优势的效果。 如果您有疑问,请不要复制。 不要害怕创建过于陡峭的层次结构。 程序员更容易陷入复制粘贴陷阱,而不是陷入陡峭的层次结构。 除非您是高级程序员,否则建议您不惜一切代价避免在生产代码中粘贴粘贴。 如果您是高年级学生,则不需要我的建议:您将避免自己复制粘贴。

边注

只是一个故事: 前一段时间,我用代码写了一封有关复制粘贴的邮件,并创建了一个输入复制粘贴的错字。 几分钟后,我得到了答复:“面食? 您指的是意大利面条代码?” 命名预兆。

翻译自: https://www.javacodegeeks.com/2015/01/use-copy-paste-programming.html

学编程 复制粘贴 害死人

学编程 复制粘贴 害死人_使用复制粘贴编程!相关推荐

  1. 安卓手机如何复制粘贴不重叠_怎么复制粘贴,教您手机怎么复制粘贴

    复制黏贴是日常生活中经常会使用到的功能,手机上我们最常用的功能之一就是复制粘贴,但是很多时候,安卓手机直接复制黏贴是很难的.那么安卓手机如何复制粘贴呢?下面,小编给大家讲解手机复制粘贴的操作技巧. A ...

  2. 优盘复制进来为空_为什么复制后文件夹u磁盘为空

    本文收集并整理了有关为什么文件夹U盘在复制时为空的相关问题,并使用内容导航来快速访问它. 内容导航: Q1: 为什么将空文件夹复制到U盘 您刚刚复制了一种快速搜索方法! Q2: 将文件复制到USB闪存 ...

  3. 语言趣味编程100例无水印_趣味c语言编程100例(三)

    经典c程序100例==51--60 [程序51] 题目:学习使用按位与 & . 1.程序分析:0&0=0; 0&1=0; 1&0=0; 1&1=1 2.程序源代 ...

  4. 电脑编程从哪里开始学习_我想学习编程,但我不知道从哪里开始

    电脑编程从哪里开始学习 How and Where Should I Learn Programming? 我应该在哪里学习编程? Software development is a challeng ...

  5. qt 5编程入门(第2版)_《C++并发编程实战第2版》第六章:设计基于锁的并发数据结构(1/3)...

    本章主要内容 设计并发数据结构的含义 设计指南 并发数据结构的示例实现 在上一章中我们了解了底层原子操作和内存模型.本章我们先把底层的细节放一放(尽管在第7章我们将需要它们),探讨一下数据结构. 为编 ...

  6. 编程猫python讲师面试_你为什么从编程猫离职?

    工作内容的原因吧. 职位是python老师,以为是开个直播线上教学,其实并不是,要一对多而且每个学生的进度不一样,所以刚开始工作的话熟课这方面要花大功夫.并且上课时一定时间内必须回复学生,培训时一对一 ...

  7. 编程猫和python区别_西瓜创客和编程猫有什么不同?哪个更值得报名?

    看情况来决定即可,在课程内容上其实出入我觉得不是很大,重点是教学服务.师资.授课模式等,单纯我自己的角度来说,我个人偏向于西瓜创客多一点,他们家的课程更具有趣味性,游戏化教学,融入卡通人物,对孩子来说 ...

  8. 编程一个最简单游戏_一个关于AI编程的游戏

    点击上方"机器学习与统计学",选择"置顶"公众号 重磅干货,第一时间送达 周末推荐一个正在玩的游戏,挺好玩的. <异常>是一个关于AI编程的游戏,在 ...

  9. 风变编程python小课课件_【风变编程】第五课笔记

    python基础语法 第五课 一.列表(list)[可边长数组] (一)列表中变量类型"可不唯一" (二)元素提取,"左闭右开" (三)切片与取一个元素,&qu ...

最新文章

  1. R可视化绘制指数分布(Exponential Distribution)
  2. 与 30 家公司过招,得到了这章面试心法
  3. arm linux gif 显示_100ASK_IMX6ULL arm板子如何显示图片、汉字、划线、背景色
  4. page.ClientScript.RegisterStartupScript
  5. 土木工程和计算机专硕,第一次发帖 关于大工土木专硕
  6. java 拷贝文件夹的实现
  7. PureFTP安装配置
  8. MySql表名的大小写问题
  9. 设置自动会计时,常数位置提示APP-FND-00804错误,解决方法
  10. C++11 chrono库
  11. 如何建立网页快捷方式linux,怎么创建linux命令”快捷方式”或”自定义命令”...
  12. 复化科特斯公式matlab_牛顿
  13. Unity利用正态分布绘制噪点图
  14. 北大哲学系杨立华先生
  15. Linux中使用宝塔面板部署tipask3.*超详细教程,吐血两天部署成功,把过程整理出来,送给被官方文档折磨的小白们~~~~
  16. 聚观早报 | 货拉拉入局跑腿业务;苹果任命首位首席人力资源官
  17. centos7 SFTP
  18. NOI2018网络同步赛游记
  19. 一开机checkingmedia_电脑开机出现checking media怎么办?
  20. 计算机网络考试重点复习(本科)

热门文章

  1. Syn Bot /OSCOVA 表达式和实体(6)
  2. 讯飞文本转语音(语音合成TTS)中添加控制静音和停顿方法
  3. 沃丰科技GaussMind在宠物生活行业的全生命周期客户体验解决方案
  4. BUUCTF:谁赢了比赛?
  5. Microsoft SQL Server 2019 安装服务没有及时响应启动或控制请求。
  6. 什么是TMD的MVP(最小可行性产品)?
  7. blog6-beta_1
  8. 时钟同步技术解析:原子钟实现 Ture-time 机制
  9. 【健康知识】46个不可不知的生活小常识 !!!
  10. 缓冲(buffer)和缓存(cache)区别