Java代码规范的重要性

news2024/9/25 23:18:48

目录

  • 1 为什么需要代码规范
    • 1.1 不规范的案例
      • 1.1.1 就因为忘记加个分号,整个程序都崩溃了
      • 1.1.2 我为什么没写注释?
      • 1.1.3 谁动了我的代码?
      • 1.1.4 半小时写的代码,花两个小时调试
    • 1.2 代码编写
    • 1.3 在项目架构
    • 1.4 数据库设计
    • 1.5 编写文档
  • 2 需要代码规范的原因
  • 3 代码规范的重要性
    • 3.1 代码规范的好处
      • 3.1.1 规范的代码可以促进团队合作
      • 3.1.2 规范的代码可以减少bug处理
      • 3.1.3 规范的代码可以降低维护成本
      • 3.1.4 规范的代码有助于代码审查
      • 3.1.5 规范代码有助于养成代码规范的习惯
  • 4 如何规范代码
    • 4.1 阿里巴巴代码规范
    • 4.2 代码规范工具
      • 4.2.1 阿里规范插件
      • 4.2.2 sonar
      • 4.2.3 两个工具对比


1 为什么需要代码规范

在这里插入图片描述

可能有同学觉得代码需要突出个人的特点,需要特异化,但是这样就会造成别人阅读起来很困难

代码不仅仅是交给机器来执行的,同时代码也是让其他同事来阅读的,如果代码不规范就会出现各种各样的问题,写多了代码只是觉得代码规范化是一件很自然的事,代码写多了,自然代码规范化咯,地球人都会。

其实不然,我们是不是缺少了小时候,十万个为什么的那种精神,为什么要这样做?为什么要那样做?那么我们为什么要做代码规范化?

1.1 不规范的案例

下面程序员在修复 bug 时可能会说的一些话或者想法 ,你占了几条?赶紧一起来看看。

在这里插入图片描述

1.1.1 就因为忘记加个分号,整个程序都崩溃了

如果你忘记添加结束分号,只是一个无心的错误,但解析器不理解这一点,它会无情地抛出一个致命错误。然后,你必须再花 20 分钟来查看代码,最后你发现缺少了一个分号,也许这就是调试的“乐趣”。

1.1.2 我为什么没写注释?

但对于复杂一些的脚本和程序,就需要某种类型的注释,以便你在几个月后甚至几年后回过头来查看。

有时候你会忘记给函数及其参数、输出格式和其他基本数据添加注释,当出现错误时,你需要调试整个脚本才能找到解决方案时,这无疑会给你添乱,这个时候你就会想,如果当初加一些有用的注释就好了

1.1.3 谁动了我的代码?

听起来就像是一种妄想症,但有时你不得不怀疑,正当你忙着补觉时,是谁在写了这些代码

过去几周或几个月忙的项目让你感到沮丧,有时候你会不记得自己往代码库里添加过东西——甚至是上周刚刚查看过的项目!

1.1.4 半小时写的代码,花两个小时调试

你一股脑儿写了一个函数,然后函数输出了一个致命的错误

为了找到问题所在,你不得不把其他代码删掉,只留下出问题的那几行代码,当你最终找到问题并把它修复,你会感到筋疲力尽,但同时也松了一口气。

1.2 代码编写

美观,排着整整齐齐的一行一行,看着就舒服;

要是不使用代码编写规范,每个方法的实现写一遍,相同的函数也不合并,在做重复的事情就是浪费时间的一件事情,而且在修改上也照成一定的困难,所以对于变量、类、接口、事件等都要有一定的规范;

如果是团队开发的话,没有规范更为混乱,要不就你有你的方法,我有我的接口,一个人来一套,那就真的乱套了,写有好味道的代码,我相信是每一个程序员的乐趣。

1.3 在项目架构

条理清晰,对于整个的项目,我们也需要一定的规范,项目多了,是采用三层、四层还是n层架构,对于开发的分工、项目的扩展性有很大的帮助,并且使用各种的设计模式,使得代码设计更加合理。

1.4 数据库设计

表以及视图的命名需要规范,不要将业务写进存储过程或者函数里面,我们应该都遇到过,一个SQL几千行的代码,修改阅读起来非常的痛苦。

1.5 编写文档

编写文档,比较相当枯燥一点,但是对于整个开发的指引也相对重要,要整个团队都要看明白你写的东西,当然也是需要规范化的,如果文档编写的符合规范并且清晰明了,对于后面交接或者问题问题排查都是大有好处的。

2 需要代码规范的原因

编码规范对程序员非常重要的若干原因

  • 软件的80%时间都是处于维护
  • 几乎没有那个软件的维护是由原编写者进行的
  • 编码规范可以改善软件的可读性,使工程师理解新的代码更快速,更彻底。
  • 源代码开源出来后不至于像垃圾一样被人嫌弃

3 代码规范的重要性

几乎每个项目,每家公司都会定义自己的编码规范,但在真正实施时,却在有意或无意地违背编码规范

程序员不喜欢改变自己的编程习惯,加之,管理者对质量控制不足,导致编码规范往往形同虚设。

有些人会认为:遵守编码规范不能给项目带来利益,也不能让客户看到我们为此付出的努力,其完全是团队自发的行为,没有必要做硬性的要求。

还有些人有更好的理由:编码规范会破坏创造性和程序质量

3.1 代码规范的好处

编码规范,在软件构件以及项目管理中,甚至是个人成长方面,都发挥着重要的作用,好的编码规范是提高我们代码质量的最有效的工具之一

3.1.1 规范的代码可以促进团队合作

一个项目大多都是由一个团队来完成,如果没有统一的代码规范,那么每个人的代码必定会风格迥异。

且不说会存在多个人同时开发同一模块的情况,即使是分工十分明晰的,等到要整合代码的时候也有够头疼的了。

大多数情况下,并非程序中有复杂的算法或是复杂的逻辑,而是去读别人的代码实在是一件痛苦的事情,统一的风格使得代码可读性大大提高了,人们看到任何一段代码都会觉得异常熟悉,显然的,规范的代码在团队的合作开发中是非常有益而且必要的。

3.1.2 规范的代码可以减少bug处理

很多IT人士将程序员比做民工,这也的确非常的形象,就像刚才提到的,复杂的算法或逻辑只占项目中很小的比例,大多仅仅是垒代码的工作。

可是越是简单,测试的bug反而是越多,而且是无穷无尽的bug,这里很大的程度上是由于代码不规范所致。 没有规范的对输入输出参数的规范,没有规范的异常处理,没有规范的日志处理等等,不但导致了我们总是出现类似空指针这样低级的bug而且还很难找到引起bug的原因,相反,在规范的开发中,bug不但可以有效减少,查找bug也变得轻而易举, 规范不是对开发的制约,而确实是有助于提高开发效率的。

3.1.3 规范的代码可以降低维护成本

随着我们项目经验的累积,会越来越重视后期维护的成本,而开发过程中的代码质量直接影响着维护的成本,因此,我们不得不从开发时便小心翼翼。

在第一点中曾提到,规范的代码大大提高了程序的可读性,几乎所有的程序员都曾做过维护的工作,不用多说,可读性高的代码维护成本必然会大大降低。

但是,维护工作不仅仅是读懂原有代码,而是需要在原有代码基础上作出修改,我们可以先想像没有统一风格的情况下,A完成开发以后,B进行维护加一段代码,过一段时间C又加一段代码。。。。。。直到有一天X看到那一大堆乱码想死的心都有了,维护也就进行不下去了。

因此,统一的风格有利于长期的维护,另外,好的代码规范会对方法的度量、类的度量以及程序耦合性作出约束,这样不会出现需要修改一个上千行的方法或者去扩展一个没有接口的类的情况,规范的代码对程序的扩展性提高,无疑也是对维护人员的一个奖励。

3.1.4 规范的代码有助于代码审查

一些公司里面会定期进行代码审查的,这样可以及时纠正一些错误,而且可以对开发人员的代码规范作出监督

团队的代码审查同时也是一个很好的学习机会,对成员的进步也是很有益的,但是,开发随意,加重的代码审查的工作量及难度,并且使得代码审查工作没有根据,浪费了大量的时间却收效甚微,代码规范不仅使得开发统一,减少审查监督,而且让代码审查有据可查,大大提高了审查效率和效果,同时代码审查也有助于代码规范的实施,一举多得,何乐而不为呢。

3.1.5 规范代码有助于养成代码规范的习惯

有助于程序员自身的成长 即使明白代码规范的好处,但是有的迫于项目压力,有的因为繁琐的规范作出很多额外的工作,更有的不重视维护的问题,而很难贯彻代码规范。

那么,我们需要了解,规范开发最大的受益人其实是自己!你有没有花费很多的时候查找自己的代码呢?尤其是出现bug的时候需要逐行的debug?自己写的代码乱了头绪的确实也见了不少,我们应该做的就是规范开发,减少自己出现的错误,很多时候项目的压力一部分也是由于前期开发中遗留的众多的问题。

还有的人觉得自己可以完成高难度的算法,就认为自己能力很强,不把规范放在眼里,很多人确实是这样,追求个性,大概让别人看他的代码一头雾水更觉得得意,殊不知复杂的算法确实可以体现你个人的逻辑能力,但是绝不代表你的开发水平,我们知道一些开源项目,一些大师级人物写得程序都是极其规范的,并非规范了就代表高水平,实际上是规范的代码更有利于帮助你理解开发语言理解模式理解架构,能够帮助你快速提升开发水平,不明白这点,即使你写的再高明的算法,没准哪天也被当作乱码别处理掉。

4 如何规范代码

如果代码不规范写的时间长了,在写规范的代码是很痛苦的,并且我们不清楚什么样的代码是规范的(每个公司的规范不一样),可能到一个公司就需要新学习一套规范

我们可用借助一些权威的规范文档以及借助一些权威的工具让我们的代码更加规范,按照这些权威的文档或者工具的规范写出来的代码规范也是其他人能够认同的,下面我们介绍一些文档或者工具

4.1 阿里巴巴代码规范

业界公认的代码规范手册(国内)当属阿里巴巴旗下出版的《Java 开发手册》,经过几个版本的迭代,最新手册为《Java开发手册(黄山版)》,更新时间为2022年2月3号

手册以 Java 开发者为中心视角,划分为编程规约、异常日志、 单元测试、 安全规约、 MySQL 数据库、 工程结构、 设计规约七个维度,再根据内容特征,细分成若干二级子目录,根据约束力强弱及故障敏感性,规约依次分为强制、推荐、参考三大类。对于规约条目的延伸信息中,“说明” 对规约做了适当扩展和解释;“正例” 提倡什么样的编码和实现方式;“反例”说明需要提防的雷区, 以及真实的错误案例。

4.2 代码规范工具

在软件研发过程中,bug越早发现,成本越低

代码扫描和单元测试,就是在早期帮我们发现程序中问题的有效手段,代码扫描不仅能帮我们发现程序的漏洞,也能督促开发人员更规范优雅地写代码。

但是如何培养好的代码规范呢,刚开始是可能对于很多代码规范不太了解,就可以采用一些代码规范工具帮助我们更好的培养好的代码规范,比如《阿里巴巴java开发手册》,sonar等代码质量管理平台等。

4.2.1 阿里规范插件

为了让开发者更加方便、快速将规范推动并实行起来,阿里巴巴基于手册内容,研发了一套自动化的IDE检测插件,于是在云栖大会上,发布了阿里人经过247天持续研发的阿里巴巴JAVA规约扫描插件——Alibaba Java Coding Guidelines.

该插件就是《阿里巴巴Java开发规约》的扩展,为了方便开发者,该插件作为一个IDE的插件形式,支持 IDEA 和Eclipse,当然也支持Android Studio( Android Studio是基于IDEA的)。

4.2.2 sonar

sonar是一款静态代码质量分析工具,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言,而且能够集成在IDE、Jenkins、Git等服务中,方便随时查看代码质量分析报告。

4.2.3 两个工具对比

  • Alibaba代码规范插件:比较关心的是代码规范,编码风格上的,例如,命名规范,注释,代码行数等。

  • SonarLint:比较关心代码正确性,存在的问题,风险,漏洞等,例如,重复代码,空指针,安全漏洞等。

所以,一般建议结合使用,使用前者来规范代码,使用后者来提前发现代码的问题,配合起来提高工程整体的代码质量,并且能够在编码阶段规避风险,提高程序的健壮性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/657349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

openpnp - 软件版本的更新记录(机器翻译)

文章目录 openpnp - 软件版本的更新记录(机器翻译)概述openpnp更新历史记录机翻了一个版本, 大概齐参考一下.END openpnp - 软件版本的更新记录(机器翻译) 概述 卡在底部相机矫正上, 底部相机的硬件安装已经很精确了, 基本能排除是硬件问题. 现在问题定位, 大概率是openpnp软…

g++ -v 若显示g++不是内部或外部命令`

MinGW - Minimalist GNU for Windows Files下载地址 下载地址点这里https://sourceforge.net/projects/mingw/files/ . exe文件下载后建议安装在D盘下tools文件夹下(个人习惯) 此次安装在默认路径下,直接傻瓜式安装 安装: 1.…

2023年网络安全竞赛——网络安全应急响应Server2228

网络安全应急响应 任务环境说明: 服务器场景:Server2228(开放链接) 用户名:root,密码:pssw0rd123 1. 找出被黑客修改的系统别名,并将倒数第二个别名作为Flag值提交&#xff1b…

CTFshow-pwn入门-前置基础pwn13-pwn19

pwn13 题目说编译运行这个flag.c文件即可获得flag。那我们先把flag.c文件下载下来,然后托到虚拟机里使用gcc编译一下,运行看看是否能够拿到flag。 gcc -o flag -flag.c ./flagok,果然拿到了flag。flag为:ctfshow{hOw_t0_us3_GCC?…

前端小练-平台首页介绍+动画

文章目录 前言结构头部外部容器文字 主体小球动画打字机动画特效实现监控 完整代码总结 前言 时间飞逝,快大四了,刚好最近看不下去考研的,而且要准备这个毕设选题了,然后就想着怎么能够把自己所学的东西都用上,一开始…

Vue H5项目如何在PC端时布局居中展示,而不全屏拉伸

目录 1、场景再现:在PC端时 H5项目布局被拉伸2、代码实现3、最终效果图4、疑惑 1、场景再现:在PC端时 H5项目布局被拉伸 2、代码实现 在App.vue中的写入,vue2 的在mounted中写入,vue3的写在onMounted写入。 逻辑讲解&#xff1a…

Android 全局黑白化-模拟颜色空间

概述 平台: RK3568 Android 11在一些特殊的日子,如默哀日、灾难日,纪念日,哀悼日等,许多的APP、网页、海报等都开始使用黑白色主题。Android 的全局黑白实现方案,可以考虑使用模拟颜色空间的方法。 借助硬…

RabbitMQ高阶使用消息推送

目录 1 从打车开始说起1.1 需要解决的问题1.2 消息推送 2 消息推送2.1 什么是消息推送2.2 方案介绍2.2.1 ajax短轮询2.2.2 长轮询2.2.3 WebSocket 2.3 WS实现消息推送2.3.1 架构介绍2.3.2 暂存数据2.3.2.1 什么是MongoDB2.3.2.2 插入数据2.3.2.3 查询数据 2.4.1 轮询任务2.4.1.…

学生党暑假在家赚钱得方法,足不出户轻松赚取买鞋钱

很多学生党都想在暑假期间赚点零花钱,最好是能在家就赚钱。在家里赚零花钱有许多途径,今天我来和大家分享一些方法。 1、问答在各大平台上非常普遍。 我们可以在各大平台上找到各种各样的问答。 如今,问答平台越来越多,提供的奖…

平凯星辰重磅支持 2023 开放原子全球开源峰会,开源数据库分论坛成功召开

2023 年 6 月 11 日至 13 日,以“开源赋能,普惠未来”为主题的 2023 开放原子全球开源峰会开幕式暨高峰论坛在北京成功举办。企业级开源分布式数据库厂商平凯星辰联合创始人兼 CTO 黄东旭受邀出席峰会参与开源论道圆桌,担任开源数据库分论坛出…

吴恩达ChatGPT课爆火

点上方计算机视觉联盟获取更多干货 没想到时至今日,ChatGPT竟还会犯低级错误? 吴恩达大神最新开课就指出来了: ChatGPT不会反转单词! 比如让它反转下lollipop这个词,输出是pilollol,完全混乱。 哦豁&#…

C++14中返回类型推导的使用

使用C14中的auto返回类型,编译器将尝试自动推导(deduce)返回类型: namespace {int xx 1; auto f() { return xx; } // return type is int const auto& f3() { return xx; } // return type is const int&auto multiply(int a, int b) { return (a * b); …

【阅读论文】时间序列数据清洗:一项调查

文章目录 摘要一、引言A.问题陈述B.问题挑战C. 组织 二、基于平滑的清洗算法A.移动平均B.自动注册C.卡尔曼滤波模型D.总结和讨论 三、基于约束的混合算法A. 顺序依赖 (OD)B.序列相关性C.速度约束D.总结和讨论 四、基于统计的CLEANING算法A.最大似然B.马尔可夫模型C.二项抽样D.时…

基于51单片机设计的井下瓦斯监控系统

一、项目介绍 井下瓦斯监控系统是煤矿安全生产中非常重要的一部分,防止井下瓦斯爆炸事故的发生,保障煤矿工人的人身安全。由于地下环境特殊,需要特殊的监测系统来实时监测瓦斯浓度等关键指标,并及时报警以便采取措施进行处理。 瓦斯气体,又称沼气,是一种轻质烃类气体,…

基于的滤波器设计

一,带通滤波器设计指标。 1,中心频率。中心频率:通常定义为带通滤波器(或带阻滤波器)频率的几何平均值,在对数坐标下,即为两个3dB点之间的中点,一般用两个3dB点的算术平均来表示。滤波器通频带中间的频率&…

网工大题题型总结(1)-------网络安全方面考察

(1)2018年上半年 试题二 (3)常见的无线网络安全隐患有 IP 地址欺骗、数据泄露、(8)、(9)、双络通信被窃听等; 为保护核心业务数据区域的安全,网络管理员在设备①处部署(10)实现核心业务区域边界 防护;在设备②处部署…

C++11特性之左值引用和右值引用

3.1二者的对比之内置类型 内置类型的无名对象(右值)为纯右值,其值本身不可改变 int main() {int a10;const int b20;int& raa;//ok,左值引用const int& rbb;//ok,常性左值引用const int& crv30;//ok,也叫万能引用&a…

网络安全竞赛——综合靶机渗透测试ZHCS-2全过程解析教程

任务一:综合靶机渗透测试 任务环境说明: 服务器场景:ZHCS-2(关闭连接)服务器场景操作系统:版本不详扫描目标靶机将靶机开放的所有端口,当作flag提交(例:21,22,23) FLAG:22,80 扫描目标靶机将靶机的http服务版本信息当作flag提交(例:apache 2.3.4) FLAG: ligh…

Vue3 Hooks函数使用及封装思想

目录 一. 什么是hooks函数? 二、如何封装一个hooks函数 三、Hooks 常用 Demo (1)验证码倒计时 (2)防抖 (3)节流 一. 什么是hooks函数? 专业解释:Vue 3中的Hooks函数…

Nucleo-F411RE (STM32F411)LL库体验 8 - PWM的使用

Nucleo-F411RE (STM32F411)LL库体验 8 - PWM的使用 1、简述 LD2连接PA5,而PA5可以映射TIM2_CH1,配合TIM2,可以输出PWM。 本片文章大量工作是添加了shell命令,可以通过pwm命令开关pwm以及设置pwm的频率&am…