敲代码也要讲“基本法”:​程序员应该遵守的编码原则

开发 前端
如何在人数众多的情况下管理如此庞大的代码呢?这就要求大家去遵守一些原则,让每个成员都编写干净且易于维护的代码。毕竟,敲代码也得讲“基本法”呀。

本文转载自公众号“读芯术”(ID:AI_Discovery)

怎样才能算作是一名优秀的程序员?Martin Fowler如是说:“任何傻瓜都可以编写计算机可以理解的代码。优秀的程序员只编写人类可以理解的代码。”

能够理解问题,以可行的方式向最终用户展示解决方案,并团结协作共同实现这个最终目标,这才能算作是好的程序员。那么问题来了,如何在人数众多的情况下管理如此庞大的代码呢?

这就要求大家去遵守一些原则,让每个成员都编写干净且易于维护的代码。毕竟,敲代码也得讲“基本法”呀~

[[326525]]

单一职责

编码一段时间之后,你的代码很可能会将变得笨拙,也许具有执行多种功能的类/模块,最终你将得到成百上千行代码的类。

单一职责就是针对这一问题——程序中的类或模块应该只负责一个特定功能的任务,这有助于保持模块最小且干净。

迪米特法则

当模块相互依赖时,它们就变得紧密耦合,这意味着一个类将对其他模块产生依赖关系。而紧密耦合降低了代码的灵活性和可重用性。

迪米特法则是由伊恩·荷兰(Ian Holland)1987年在东北大学首次提出。该原理总结如下:

  • 每个单元对其他单元的了解应该有限:只了解与当前单元“紧密”相关的单元。
  • 每个单元只能与朋友交谈;不要跟陌生人说话。
  • 只与直系朋友交谈。

该原理可以拥有独立的类和代码,因为依赖性较弱,其之间的关联也更加松散,而你所做的任何更改都应反映在最直接的朋友身上。

干净的代码比聪明的代码好

一些程序员在写代码时会忍不住“炫技”,然而这种看起来很厉害的代码比实际易懂的代码更难理解。

这相当于对于读者来说并不友好,相当于给他们出难题。事实上,只要代码干净且易于理解,没人会真正在乎代码有多聪明。

例如,有些人想用三元运算来执行传统的if-else语句。三元操作是标准编程操作,这当然没问题,但问题出在嵌套三元语句时。

  1. let A = 10
  2. let B = 3
  3. let C = 25;(A>B?A:B)// fine(A>B?(A>C?A:C):(B>C?B:C))//notfineif(A>B){ 
  4.     (A>C?A:C) 
  5. }else{ 
  6.     (B>C?B:C) 
  7. }//better 

YAGNI(You Aren’t Gonna Need It)

生活中,人们做一件事时会提前计划并做好准备。但这在编程中不是很适用。YAGNI原则就在谈这一点,永远不要为将来可能需要的功能编写代码。它很可能不需要,这是在在浪费时间。

你可以将这一条其视为对KISS原则的具体应用,同时也是对那些认真遵循DRY原则的人的回应。缺乏经验的程序员通常会尽最大努力避免编写最抽象和通用的代码,避免使自己代码变得笨拙。但是太多的抽象最终会导致无法维护的代码膨胀。

你要做的是,只在看到需要抽象的代码时才抽象代码。相反,不要将DRY原则应用于将来可能会反复编写的代码。

简而言之,就是活在当下,而不是将来。

用正确的工具去运用这些规则

有一些工具可以帮助更轻松地遵循这些原则,例如,前端开发人员使用像Bit.dev这样的云组件中心来发布独立的组件。你需要去寻找这些工具。

那么它们又是如何帮助程序员遵循这些原则的呢?

  • 将组件构建为独立的代码段(旨在作为独立代码进行发布,重用和协作),自然使每个开发人员都更加注意单一职责原则。
  • 从任何代码库发布组件的自由意味着可以共享和重用更多代码,也免不了遵循DRY原则。这也意味着不会用从不使用的UI组件来构建完整的设计系统,而是遵循YAGNI原则,仅在需要时才构建和发布每个组件。

[[326526]]

图源:unsplash

编写干净易懂的代码听起来简单,实际做起来却并不容易。如今,这已经成为一项必不可少的要求了。我们需要不断实践,必须慢慢改变处理问题的方式,并以一种清晰的方式得出解决方案。这不是一夜之间的过渡,而是需要几个月和几个项目的积累。

编程是一项团队合作任务,项目成功与否很大程度上取决于团队表现。在争取不做“猪队友”的基础上,努力去做那个带飞团队的大神吧!

 

责任编辑:赵宁宁 来源: 读芯术
相关推荐

2014-11-10 09:46:57

程序员

2012-08-06 17:10:37

2022-02-19 18:39:34

AI数据训练

2010-01-19 09:14:46

.NET编码习惯

2014-10-22 10:54:14

程序员

2009-02-23 20:45:54

程序员基本素质

2011-03-14 10:56:56

程序员人才

2024-04-03 12:14:15

微服务架构监控

2015-08-20 09:06:48

程序员

2012-03-13 09:24:30

Java

2015-07-02 11:20:17

程序员代码

2020-03-27 09:24:39

程序员技能开发者

2011-12-19 09:40:21

程序员

2011-03-18 10:05:05

2009-03-13 15:18:45

程序员饮食杂谈

2017-12-20 15:42:13

2017-12-19 20:35:22

程序员中兴事件自杀

2016-04-11 17:49:33

程序员外包

2013-04-19 10:44:05

程序员禅道

2012-04-27 09:24:44

程序员编码员
点赞
收藏

51CTO技术栈公众号