每个程序员都能写出能运行的代码,但不是每个人都能写出好读好改的代码。好代码是什么样的?简单说,就是别人看一遍就懂,改起来顺手,测试起来也方便。具体来说:
容易看懂:代码像说话一样清楚,起名字让人一看就明白
容易修改:改这里不会影响那里,每个部分只管自己的事
容易测试:写测试用例不费劲,各种情况都能照顾到
结构清楚:相关的放一起,不相关的少联系
简单直接:不耍小聪明,不做现在用不上的功能
记住:能运行的代码只能完成任务,好代码才能让项目活得长久。
下面这这些方法,帮你写出今天能跑、明天好改的代码。
起名字是门学问,好名字比写注释还有用。
用有实际意思的名字,别用a、b、c这种
名字要体现业务含义,别只写技术细节
用容易读、容易念的名字,方便讨论
用方便搜索的名字,找起来快
别加没用的修饰词,比如Data、Info这种
尽量别用缩写,除非大家都懂
布尔变量用is、has、should、can开头
布尔变量别用否定形式,比如isNotReady就不如isReady清楚
整个项目用同样的命名规则
布尔变量用形容词
类名用名词
同一个意思别用不同词,比如user和account混用
方法名用动词,比如getUser、saveOrder
名字长度要适中,太短没意思,太长难读
好方法应该只做一件事,并且把它做好。
方法要短小,最好不超过30行
参数要少,超过3个就要想想能不能简化
别用布尔值当参数,这通常说明方法做了太多事
方法尽量不要有副作用
用枚举代替标志位参数
用空行把不同逻辑分开
如果30秒内看不懂方法在干嘛,就该重写了
避免方法里嵌套太深,超过3层就难读了
及时去掉没用的代码
把复杂计算拆成小方法
错误处理要统一
好的类应该像公司的部门,各管一摊,互不越权。
一个类只负责一件事
类不要太大,超过100行就要注意
公共方法不要太多,5个以内比较好
把小任务拆成私有方法
按执行顺序排列方法
多用组合,少用继承
别让类之间关系太复杂
内部实现细节不要暴露给外面
代码本身应该就能说明白,注释是辅助。
能不用注释就不用
别写一看就知道的废话
别过度依赖注释
用好名字代替注释
注释主要解释“为什么这么做”
注释可以说明隐藏的逻辑
api文档要写清楚
过时的注释要及时删除
复杂的算法可以加注释说明
测试是代码的保险,好测试能让你安心改代码。
测试名字要说清楚测试什么场景
用Given/When/Then的结构组织测试
用Arrange/Act/Assert的步骤写测试
测试里别用if、for这些逻辑
一个测试只测一个行为
用有意义的测试数据
隐藏无关的测试细节
断言要反映业务要求
测试结果要稳定,每次跑都一样
用参数化测试减少重复
模拟依赖时,优先用fake对象
测试要跑得快
测试之间要独立
测试要能重复运行
测试要能自己判断对错
测试要覆盖正常、异常、边界情况
清楚的提交记录能让团队合作更顺畅。
早点提交,经常推送
提交信息要说清楚为什么改
提交信息用现在时态
提交里附上相关任务链接
一次提交只做一件事
提交前跑一遍测试
别提交调试用的临时代码
有些代码问题很常见,要特别注意。
别用魔法数字,用常量代替
过长的条件判断要简化
少用全局变量
参数列表别太长
别滥用基本类型,用合适的类型建模业务
嵌套别太深
控制圈复杂度
难测试的代码通常有问题
别重复代码
别过度设计
别提前优化
一致的格式让代码更好读。
团队用同样的编码规范
用自动化格式化工具
限制每行长度
别用水平对齐
遵守缩进规则
变量在用的时候声明
大括号风格要统一
导入语句要整理
写好代码要遵循一些基本原则。
不要重复自己(DRY)
保持简单(KISS)
不做不需要的事(YAGNI)
告诉对象做什么,别问它状态(Tell, Don‘t Ask)
单一职责原则
里氏替换原则
接口隔离原则
依赖倒置原则
多用组合,少用继承
分而治之
高内聚
低耦合
还有一些小技巧也很管用。
用好IDE的重构功能
熟练使用快捷键
按功能组织文件结构
结对编程
删掉没用的代码
记住代码是给人读的
可读性比耍小聪明重要
大多数时候,可读性比效率重要
让代码比你接手时更干净
早点测试,经常测试
早点重构,持续重构
多做代码审查
重复出现3次的代码就要抽象
尽量避免用NULL
能运行的代码不等于好代码
没有测试就不可能有好代码
代码要像写文章一样有结构
及时还技术债
多读好代码,学习别人的写法
写好代码不是一朝一夕的事,需要不断练习和反思。从今天开始,每次写代码时多想一步,多用几个这些方法,慢慢你就会发现,你的代码质量真的提高了。好代码不仅让现在的你省心,也让未来的你感谢现在的自己。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!
一个系统可以维持5年,10年,甚至20年以上,但是代码和设计模式的生命周期非常短,当对一个解决方案使用不同的方法进行迭代的时候,通常只能维持数月,数日,甚至几分钟的时间
良好的编程习惯涉及到很多方面,但在软件行业内,大多数的公司或组织都不会把良好的编程习惯列为主要关注点。 例如,具有可读性和可维护性的代码比编写好的测试代码或使用正确的工具更有意义,前者的意义在于可以让代码更易于理解和修改。
减少嵌套会让代码可读性更好,同时也能更容易的找出bug,开发人员可以更快的迭代,程序也会越来越稳定。简化代码,让编程更轻松!
Google为了那些还不熟悉代码规范的人发布了一个JS代码规范。其中列出了编写简洁易懂的代码所应该做的最佳实践。代码规范并不是一种编写正确JavaScript代码的规则,而是为了保持源代码编写模式一致的一种选择。
程序员似乎忘记了软件的真正目的,那就是解决现实问题。您编写的代码的目的是为了创造价值并使现有世界变得更美好,而不是满足您对自我世界应该是什么的以自我为中心的观点。有人说:如果你拥有的只是一把锤子,那么一切看起来都像钉子一样
TinyMCE是一个轻量级的基于浏览器的所见即所得编辑器,由JavaScript写成。它对IE6+和Firefox1.5+都有着非常良好的支持。功能方强大,并且功能配置灵活简单。另一特点是加载速度非常快的。
函数式编程对应的是命令式编程, 函数式编程的核心当然是对函数的运用. 而高阶函数(Higher-order)是实现函数式编程的基本要素。高阶函数可以将其他函数作为参数或者返回结果。所以JS天生就支持函数式编程
朋友发表了一条说说:入职新公司,从重构代码到放弃”,我就问他怎么了?他说,刚进一家新公司,接手代码太烂,领导让我先熟悉业务逻辑,然后去修复之前项目中遗留的bug,实在不行就重构
页面实现关键词高亮显示:在项目期间遇到一个需求,就是搜索关键词时需要高亮显示,主要通过正则匹配来实现页面关键词高亮显示。在搜索结果中高亮显示关键词:有一组关键词数组,在数组中筛选出符合关键字的内容并将关键字高亮
软件工程学什么? 学计算机,写程序,做软件,当程序员。听说学计算机很辛苦? 是的,IT行业加班现象严重。在计算机世界里,技术日新月异,自学能力是程序员最重要的能力之一。选了这个专业,就要时刻保持好奇心和技术嗅觉,不能只满足于完成课内作业。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!