代码精进之路
范学雷
前 Oracle 首席软件工程师,Java SE 安全组成员,OpenJDK 评审成员
38234 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
结束语 (1讲)
代码精进之路
15
15
1.0x
00:00/00:00
登录|注册

04 | 代码规范的价值:复盘苹果公司的GoToFail漏洞

提高代码可读性
节省时间
便于代码分析
提高代码评审效率
避免额外的警告检查
节省时间
规范的代码可以消除安全漏洞
复杂代码容易出问题
优秀的代码是给别人看的
严格遵守编码规范使工作更简单、轻松、愉快
早期养成编码规范习惯
快系统和慢系统
降低软件维护成本
提高编码效率
降低代码出错的几率
包括文件组织、缩进、注释、声明、语句、空格、命名约定、编程实践、编程原则和最佳实践
针对特定编程语言的一系列规则
强调代码的规范化
熟练掌握编程语言
小结
编码规范越使用越高效
编码规范的价值
什么是编码规范
优秀程序员的品质
代码规范的价值

该思维导图由 AI 生成,仅供参考

我们在上一讲中讨论了一个优秀的程序员都需要具备哪些良好的品质,第一点就是要熟练掌握一门编程语言。
作为每天都要和代码打交道的人,光是熟练掌握还不够。我们需要像文字写作者一样,对代码有一种“洁癖”,那就是强调代码的规范化。

什么是编码规范?

要回答为什么需要编码规范,我们首先要了解编码规范指的是什么。
编码规范指的是针对特定编程语言约定的一系列规则,通常包括文件组织、缩进、注释、声明、语句、空格、命名约定、编程实践、编程原则和最佳实践等。
一般而言,一份高质量的编码规范,是严格的、清晰的、简单的,也是权威的。但是我们有时候并不想从内心信服,更别提自觉遵守了。你可能想问,遵循这样的约定到底有什么用呢?
编码规范可以帮我们选择编码风格、确定编码方法,以便更好地进行编码实践。 简单地说,一旦学会了编码规范,并且严格地遵守它们,可以让我们的工作更简单,更轻松,少犯错误
这个问题弄明白了,我们就能愉快地遵守这些约定,改进我们的编程方式了。

规范的代码,可以降低代码出错的几率

复杂是代码质量的敌人。 越复杂的代码,越容易出现问题,并且由于复杂性,我们很难发现这些隐藏的问题。
我们在前面已经讨论过苹果公司的安全漏洞(GoToFail 漏洞),接下来再来看看这个 bug 的伪代码。这个代码很简单,就是两个 if 条件语句,如果判断没问题,就执行相关的操作。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

编码规范对软件开发至关重要,它能提高代码质量、降低出错几率、提高编码效率和降低软件维护成本。严格遵守规范可以使代码更简单、直观、逻辑清晰,从而降低出错几率,提高编码效率,节省时间和精力。在软件维护阶段,规范的代码能够提高代码的可读性,使参与者更容易理解和解决问题。文章还强调了编码规范的使用越多越高效的特点,类比了乘法口诀的例子,强调了养成编码规范的习惯对于提高工作效率的重要性。最后,通过一段代码示例,引导读者思考如何改进代码的规范性。整体而言,本文强调了编码规范对软件开发的重要性,以及遵守规范对提高工作效率和代码质量的积极影响。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《代码精进之路》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(30)

  • 最新
  • 精选
  • Carlos
    置顶
    我感觉我就是一个有代码洁癖的人,写代码时有自己的原则和规范方法,其中做到易读和结构简洁是首要原则,这里面像命名,缩进,空行这种静态规则,有IDE的帮助还算比较容易做到。对于不少人来说比较难做到的可能是代码逻辑的组织。前几天刚看了个同事写的代码,关于视频课程管理的,表结构设计也是他做的。业务上要求课程需要属于某个等级,等级属于类别,类别属于厂商,为了做到同一个课程向不同客户展示不同的价格,又设计了个课程价格关系模型。这几个子项都有对应的业务模型和业务接口类。问题来了,添加课程时,在课程的某一个controller方法里,分别通过getparameter获取参数,构造数据对象,然后调用业务逻辑接口执行插入,最终完成多个业务模型的操作,有的是一对多再来个循环。一个方法里干这么多事情,我都接受了,居然把获取参数和给对象赋值无规律的穿插进行,偶尔还穿插来个参数校验,并且还在方法内部把获取过来的参数加个中文注释。删除课程数据时,需要把关联子模型数据也删除掉,他把各个子模型的删除方法都写到课程的service里。另外还存在A引用B,B又引用A,同时A又被其他好几个地方引用,不同引用之间通过不同参数走不同分支,并且有些参数在哪个场景下传过来的,他自己也弄不清了。带来这样问题就是写代码前,没把逻辑脉络梳理清楚,完全跟着感觉走,就一个简单的增删改查能写成这样,真怀疑要是把一个后端数据服务的代码给他写不知道能给写成啥样。

    作者回复: 如果逻辑没有理清楚,就开始写代码,就有可能后面越改越乱。 我想起来前面有人说的小黄鸭的办法,把代码逻辑讲给小黄鸭听。能讲出来,逻辑就被梳理了一遍。 我在评审代码的时候,如果看到太复杂的代码,我就问作者问题,问为什么这样,问什么不那样做。几个问题下来,代码就会顺利些。

    2019-01-11
    2
    5
  • 👽
    读烂代码就想抽人。 类似于new一堆对象。然后在几十行以后才使用 如果命名规范还好,如若不规范就要点回去看。 还有这样奇怪的代码,写了个循环便利集合,但是循环中只有 if(list.get(0)!=null){ return list.get(0); } 每次读这样的代码。全都要研究一下这个循环是干啥的。 还有这样的,解决异常。try包了一大串代码,找哪一行抛的异常很费劲。 还有实体类型字段,String state=“1”; 然后后面备注。1代表啥,2代表啥,3代表啥。 不老老实实写个枚举或者常量嘛? 还有代码里的无端空行。写一行,空一行......一个半屏幕滚动能看完的代码,硬是看了两个半屏幕。 关键是还没法去说,毕竟同事之间。只是默默祈祷,不要让自己维护他的代码就好。

    作者回复: 😂我看这个留言,满是欢乐啊。 为什么没办法说呢? 一般这种问题,说了就是帮助他提高啊。 当然,我也理解有些公司文化不开放。 我替你想两个办法,一个是琢磨琢磨怎么说他会愉快滴接受,并且感谢你。或者,琢磨琢磨怎么搞个规范,让流程帮助他。 他变好了,你也工作轻松,心情愉快,对吧? 多赢! 这种事情,也能给你带来成就感,不信你就试一试😄。

    2019-01-11
    2
    13
  • Y024
    阿里巴巴 java 开发规范,官方已提供了 idea、eclipse 插件,详情可以访问官方链接:https://github.com/alibaba/p3c/blob/master/README.md 此外还有FindBugs、PMDPlugin、CheckStyle 、JavaNCSS、sonarlint,可以多管齐下,为你保驾护航。

    作者回复: 谢谢提供这么多资源🙏

    2019-01-13
    2
    10
  • richey
    范老师,阿里的代码规约检查插件已经有了,还挺好用的

    作者回复: 谢谢你! 我要记得下次把这个修订了。

    2019-01-11
    6
  • cocoa
    1.属性明确加上private 2.泛型赋值的时候自动判断类型,不用显示加 3.if的第一个或条件不需要 4.if使用大括号 5.map一般用来转换,这块用迭代foreach就行了 6.不用使用顺序迭代,本来集合list就有顺序 7.toSring显示标明override

    作者回复: > 1.属性明确加上private 如果是个公开类,需要使用private修饰符。 如果是内部类,使用缺省的修饰符也可以。 > 2.泛型赋值的时候自动判断类型,不用显示加 是的。 > 3.if的第一个或条件不需要 如果把缺省的无参构造函数补上,这个条件就明显地不需要了。 > 4.if使用大括号 对的。 > 5.map一般用来转换,这块用迭代foreach就行了 > 6.不用使用顺序迭代,本来集合list就有顺序 是的,foreach足以。 > 7.toSring显示标明override 是的,这是一个违反规范的地方。

    2019-01-11
    6
  • 👽
    “我替你想两个办法,一个是琢磨琢磨怎么说他会愉快滴接受,并且感谢你。或者,琢磨琢磨怎么搞个规范,让流程帮助他。 他变好了,你也工作轻松,心情愉快,对吧? 多赢! 这种事情,也能给你带来成就感,不信你就试一试😄。” 为了看到规范代码。我做了以下的事: 1. 自己先更加严格要求自己的代码。 2. 参加了阿里巴巴代码规范的认证考试,并拿到了证书。 3. 把证书给领导看一眼(证明我自己是规范的),然后说规范很有用。 4.领导表示,嗯,他也觉得是这样。 5.领导在群里通知,建议大家考一下,费用公司报销。 5几个月过去了,我还是唯一一个我们单位执证上岗的。 6. 报了范老师的课程。无法要求别人,但是更不能停止精进自己!最起码不能让别人骂我的代码! 希望这段留言不会被我同事或者领导看到,紧张。 不过,被看到了,貌似也有好处,没准我们公司的代码明天就规范化了呢。

    作者回复: 赞! 领导和同事看到你的留言也没问题的,规范是多赢的局面,大家都进步。规范这东西,用的人越多力量越大,效率越高。 同事们没有规范,大概率是还没有意识到规范的好处。前几篇文章我自己都觉得都有点啰嗦。但是我就是要把这些基本的理念,翻过来调过去的讲,从不同的角度讲。有了这些意识以后,技术的东西就都是小事了。我也建议你分享一下专栏的这几篇文章给同事们。 我想一想有什么形式,可以让三五个小伙伴组成一个小组,把代码规范就启动起来,还不增加大家的工作负担。也许后续我们可以写一个专题文章。专栏的小伙伴们,也帮着想想办法。

    2019-01-14
    2
  • 槛外人
    希望能多点最佳实践,最近几期好像有点重复了

    作者回复: 好的,以后多考虑加点实践。

    2019-01-14
    2
  • Linuxer
    看自己的代码不顺眼,看别人的也是,开源代码很多就看着赏心悦目。总感觉那方面还需要加强,总是不得其法

    作者回复: 我们这个专栏就是讨论怎么写好代码的。我们慢慢来。 讨论区有很多高手,多参与讨论,多做练手题。一定会有收获的。

    2019-01-12
    2
    2
  • 秦凯
    分享两条简单、有价值的实践: 在编辑器中设置使用指定的空格数(一般四个)替换tab键; 范老师之前提到的,用if else 替换三目运算符,以及用 i += 1; 替换 ++i;等,可以让代码逻辑更易于理解,降低阅读成本。

    作者回复: 好使😊,tab键,可以在IDE设置好,vi也可以设置,把tab换成四个空格。

    2019-01-11
    2
  • 6点无痛早起学习的和尚
    这里想问老师一个问题:那金融业务编码规范又是什么呢?包含什么内容?

    作者回复: 编码规范一般可能不分业务类型,找一个通用的编码规范就好。

    2024-01-15归属地:北京
收起评论
显示
设置
留言
30
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部