如何写出格式清晰的代码

代码格式的意义

代码是用来描述业务逻辑的表达语言。而代码的格式则是为了更精准地表达业务逻辑。

有的人可能会认为,无论多么的难以阅读,只要能完成产品预定的业务逻辑,就是好的代码。我认为这个想法是不对的。主要原因在于,在大型项目和持续维护的过程中,以及其他人在进行 backup 的时候,比起当时的业务逻辑是否准确,能否让人理解你的意图更加重要。而代码格式便是服务于此:

为代码提供额外的上下文信息。

尽管当前各种现代 IDE 提供了方便的格式化操作。但是这种格式化主要是针对一些简单的格式比如:

  • 元素之间的空格

  • import 的位置

  • 括号之间的缩紧

尽管上述这些在实际各种中也很重要,由于有 IDE 的辅助,我们可以减少一些对于这方面的关注。

注:但是建议调整格式的时候单独提交 commit,否则与万一与业务提交混合在后续比对修改点的时候就比较恶心。

代码格式总则

如同上文所说的,代码格式是为了提供代码业务之外的上下文信息。那么在这里我们就可以明确一下代码格式提供这个信息的意义:

代码格式为代码提供符合人们阅读直觉的额外信息。

当然,这个人类阅读直觉不同的语言可能不一样,这里指的是大多数 Java 软件中使用的规则。而这里我列举一些主要值得注意的点,主要有:

  • 从上往下阅读

  • 相同内容聚集

  • 概念间分割

从上往下阅读

由于人们的阅读顺序是从上到下,从左到右的方向,所以人们常常会假定逻辑顺序也是如此的。一般来说可以有:

变量在前

Java 中的类属性一般在前面。而在方法中也一般建议将所使用到需要声明的变量,这样便于在阅读方法的时候对于接下来会出现的变量一目了然。同时,如果你发现变量与实际使用的距离太远了,那说明这个方法的行数太长了,应该优先确认一下是否可以抽取方法。

调用在前

由于人们的阅读顺序会暗示逻辑顺序,所以对于调用的方法,最好在被调用方法的上面。当然了,如果不能全部满足这种情况的话,至少区分一下主次。如果大体满足这个排序逻辑后,整体 java 文件会呈现一种:主要对外提供逻辑在前,内部被调用逻辑在后的情况。那么当开发人员浏览 java 文件的时候,应该在浏览上层的 public 方法的时候,就大概知道类的大概流程了(因为被调用的私有方法的主要信息,可以通过方法名在调用方法中提供出来)。

相同内容聚集

对于业务逻辑来说,如果存在一些关系紧密的概念的话,那么他们就应该被尽量地放在一起。这样的好处是当开发想确认是否存在某一逻辑时,可以根据已有的知识在附近检索就可以了。

而他们的关联性越强就更应该放到一起,例如方法之间、或者同时使用某个变量。以StringUtils中的部分代码来举例子:


可以看到图中的方法可以分为Empty,Blank两组,然后又各自根据单个参数、序列入参可以分为两组。如果开发根据提示只看见了isEmpty()方法的话,那当他点进来的时候就可以很轻松的根据上下文来选择自己需要的方法来使用了。

概念间分割

概念分割的意义在于,利用空行的存在,将一整段的逻辑进行分段。这样人们将很容易地把注意力集中在各个字分段的首行上,从而从各个分段的模块中检索到自己关心的逻辑。

一般这种的意义分为两种:

一种是类中的分割,这种就是 package、import、class 等部分的分割,但是因为这种的一般由 ide 来快速辅助完成,所以就也不太用关心。

另一种是在方法内进行区分。在方法内,根据各部分代码的职能来划分,以之前的相应流的代码来举例:


代码中根据注释将不同的业务进行了分割,那么我看到了创建 S1,后面的三行就可以直接忽略了,因为一目了然他们是一个部分的逻辑,然后就可以直接跳跃到订阅部分的逻辑。

而要注意的是,由于代码本身也会对代码逻辑进行分割,所以要合理地使用注释避免反而破坏代码逻辑的整体性。

工具设置

现在 Java IDE 都有辅助格式化的操作,在 IDEA 中快捷键为:option + command + L

而也可以在设置在 git 提交前进行自动格式化,配置如下:


但要注意可能会干扰 commit 时的逻辑修改点,建议单独的进行格式化。

或者还有一款Save Actions Plugin的插件,可以帮你在编辑时自动格式化。

最后

每个团队都有一套自己的代码格式规范。比如代码格式的宗旨是为了让开发了解业务的时候更加的明确。比如原先团队时就有过建议,每次都将新增方法放在类的最后,目的是便于直接地判断出问题是否由新代码引起的。但是在 IDE 有 git 提交提示的今天,我认为这种情况会导致其他代码格式更加混乱。但不论如何,只要全团队的人员可以认同同一种代码格式,保证沟通顺畅,则这个格式就是有意义的。

本文文字及图片出自 InfoQ

你也许感兴趣的:

  • 【外评】电脑从哪里获取时间?
  • 【外评】为什么 Stack Overflow 正在消失?
  • Android 全力押注 Rust,Linux 却在原地踏步?谷歌:用 Rust 重写固件太简单了!
  • 【外评】哪些开源项目被广泛使用,但仅由少数人维护?
  • 【外评】好的重构与不好的重构
  • C 语言老将从中作梗,Rust for Linux 项目内讧升级!核心维护者愤然离职:不受尊重、热情被消耗光
  • 【外评】代码审查反模式
  • 我受够了维护 AI 生成的代码
  • 【外评】Linux 桌面市场份额升至 4.45
  • 【外评】作为全栈开发人员如何跟上 AI/ML 的发展?

发表回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

深圳SEO优化公司玉屏网站关键词优化公司网站优化外包方法清徐网站优化平台优化句子的网站网站怎么优化顶火22星东莞品牌网站seo优化金华求推荐好的网站推广优化网站优化推广价格兴平网站关键词优化软件山东公司网站优化孝感工厂网站优化哪家好奉化最火百度网站优化网站 流程优化买网站做优化可以吗武汉网站关键词优化技巧手机上的网站优化网站内容及优化技巧上虞网站优化公司哪家好宁波市老网站优化牟平seo网站优化哪家好sem优化网站如何优化网站65金手指靠谱太原企业网站优化推广优点pc网站优化案例苏州市优化网站推广批发薛城网站优化推广杭州整站优化网站腾冲网站优化报价哈尔滨seo网站排名优化开平服务好的网站优化有哪些歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化