作者 | 老峰

责编 | 郭芮

一直以来,关于“代码规范”的话题都备受关注,业界甚至有很多流传甚广的段子不断调侃之。既然代码规范能引起这么大的共鸣,那么今天我们谈谈一个程序员的自我修养——如何写出优雅的代码?

Martin(Bob大叔)曾在《代码整洁之道》一书中说:当你的代码在做 Code Review 时,审查者要是愤怒地吼道:“What the fuck, is this shit?”、“Dude, What the fuck!”等言辞激烈的词语,那说明你写的代码是 Bad Code,如果审查者只是漫不经心的吐出几个:“What the fuck?”,那说明你写的是 Good Code。

衡量代码质量的唯一标准就是每分钟骂出“WTF”的频率。

代码不规范会有哪些痛点?

影响团队合作,降低效率。对于共同完成项目的团队而言,如果没有统一的代码规范,最终整合代码时可能会出现看不懂命名或者阅读过程不断询问的情况,导致团队效率低下,甚至造成成员之间的矛盾。例如 git push -f,把别人的劳动成果全部覆盖掉,出现一次就会遭到全员围攻,猪队友啊......

提高维护成本。代码不规范导致可读性降低,后期的代码维护会耗费更多人力甚至财力成本.一旦代码越来越多,最后的维护就难以为继,会给运维人员造成很大负担。

引发各种 bug。如果输入输出参数、异常处理、日志处理等没有规范,很容易导致大量低级 bug,还很难找到 bug 的原因。

不利于代码审查,甚至造成安全漏洞。代码审查是纠正代码错误,保证开发周期安全顺利进行的重要一步。如果代码不规范,就会加重代码审查的工作量和难度,导致代码审查工作没有根据还浪费时间。某些情况下,代码不规范还会造成安全漏洞,此前 Morpheus 智能合约爆出的重大安全漏洞,就是大小写错误造成的。

不利于程序员自身的成长。有些人可能没有意识到代码规范的重要性,有些人意识到了但由于项目时间紧、流程繁琐等原因而不去遵循。这跟当前开发流程与安全之间的关系很像。很多人为了速度而牺牲前期的必要流程,却给后续的工作带来了更多麻烦。其实,规范的代码有助于理解开发语言、模式和架构,也有利于提升开发水平。

X,哪个蠢货写的代码!一看注释,author是自己......如果你发现你之前的代码很low,说明你已经进步了。那么如何写出优雅的代码?

如何写出优雅的代码?

1、采用规范

每种语言都有自己的推荐风格,如Swfit最近有Google Swift Style Guide,显然OC与Swift有着不同的风格。当我们开始写Swift,首先要注意的就是按照Swift的风格写,而不是沿用OC的风格,组内应该形成一种公认统一风格以便于后期维护。

从规范目标细节的角度,代码规范分为:

注释、命名、缩进空格、语句格式、规模、可靠性、语言特殊项。

2、Code Review

一份优雅、干净、整洁的代码通常自带文档和注释属性,读代码即是读作者的思路。我们在Review的过程中会发现很多不够优雅的代码,命名不规范者or影响性能,甚至存在致命bug。那么如何在团队内推行Code Review呢?我分享下我们组内目前采用的形式。

我们团队内部采用Gitlab工具,在开始一个新的迭代后,每个同事为自己负责的模块建立一个独立分支,各自在自己独立的分支完成开发,功能开发完成后,在Gitlab提交Merge Request,如果与其他同事模块有依赖,或者业务较为复杂,可分为小的功能点多次提交;负责Code Review同事Review的时候应该先让提交者讲一下大概设计的思路,在GitLab中指出存在优化的点,待提交者修改完毕后再将该分支合入主干分支。

引入Code Review的机制在一定程度上可以提升团队内代码质量,也可以减少低级bug的出现,对组内交叉熟悉彼此业务也有好处。

3、Code Lint

可能尽管我们推行了统一的代码规范,也进行了CodeReview,我们会发现只要团队成员足够多,每位成员都有不同的背景,纯靠人肉难免依然有不规范的代码存在,那么这个时候就应该采用Code Lint了。每种语言应该都有自己的编译器对应的插件,以iOS为例有SwiftLint 、ocLint,这里我简单介绍下我们团队内部使用的SwiftLint。

SwiftLint可以看作是一个Xcode插件,基于Sourcekit & Clang AST的应用(Sourcekit & Clang AST这里不做过多介绍),通过语法规范检查,可以在编译期将所有不符合Swift规范的代码全部用warning标注出来,一些严重的违背规则的代码甚至让它无法通过编译(万里江山一片黄)。

SwiftLint安装很方便,Homebrew brew install swiftlint即可安装好,然后为Xcode添加Run Script Phase。

接下来编译,就可以看到99+ warning(如下图所示)。请不要惊慌,我们可以使用swiftlint autocorrect自动解决部分警告,也可以通过.swiftlint.yml配置符合团队规范的规则,通过编译器检查规范比人肉检查更加准确高效细致,团队内部也可以做到高度统一的 Code Style。

4、阅读学习交流分享

总结绝大多数开发者的日常,对新功能开发的迫切远远大于重构一个旧的功能,导致很多代码都没有很好的版本迭代。慢慢的,破旧、破损的模块让人觉得似乎无人照管,于是别人也不再关心,最终自己也参与破坏活动,走上一条打补丁的不归路。

其实从一开始,我们就应该抱着一种重视自己的代码的态度来写代码,而不是想着先完成功能,以后再来重构优化,代码如生活:稍后就等于永不。如何保持代码整洁,离不开设计模式和代码重构,多阅读开源社区的代码,比如最近微信开源的MMKV就可以读来学习,像世界同行大佬学习交流如何优雅的写代码,也可以读一些经典的书籍如《代码整洁之道》、《重构改善既有代码的设计》、《重构改善既有代码的设计》等等。

声明:本文为公众号 iOSTips 投稿,版权归对方所有。

推荐阅读:

  • 微软沈向洋:被一张报纸改变的人生

  • 和 90 后女程序媛谈恋爱,一定要注意的细节!

  • 厉害了,天刚一冷程序员就都换上了衬衫……

  • 把14亿中国人都拉到一个微信群在技术上能实现吗?

  • 大数据年薪30w和年薪60w的差距,就在这道坎!

  • 掌握这9大重点要素,智能合约开发不是事儿

  • 面趣 | 这道微软面试题你会吗?

程序员如何写出优雅的代码?相关推荐

  1. 成为一名优秀的程序员,写出优雅的代码,要看哪本书?

    你是否曾为糟糕的代码所深深困扰?如果你是位有点儿经验的程序员,定然多次遇到过这类困境.我们有专用来形容这事的词:沼泽(wading).我们趟过代码的水域.我们穿过灌木密布.瀑布暗藏的沼泽地.我们拼命想 ...

  2. 后端程序员如何写出优雅的前端试图【Thymeleaf】

    Thymeleaf Thymeleaf 是一个现代服务器端 Java 模板引擎,适用于 Web 和独立环境. [官网地址]:https://www.thymeleaf.org/ 文章目录 Thymel ...

  3. 谈代码整洁之道,如何写出优雅的代码

    最近为了制定团队的代码规范,拜读了鲍勃大叔的<代码整洁之道>,读完之后,在如何写出整洁优雅的高质量代码方面有很大的启发.我认为<代码整洁之道>是我们提高编程能力和自我修养必读之 ...

  4. 优雅写mysql_如何写出优雅的代码?

    我 18 年在 PyCon 做过一次类似的分享 ,目的是如何写出优雅的代码.希望能部分回答这个问题,也希望与大家多多讨论.<聊聊编程原则>​zhuanlan.zhihu.com 要成为合格 ...

  5. 命名自喜剧团体,宅男程序员三个月写出的编程语言是如何改变世界的?

    大数据文摘出品 来源:Zdnet 编译:洪颖菲.李可.Vicky.李雷 1989年,荷兰的一位叫Guido Van Rossum的宅男程序员觉得其他语言都不好用,于是花三个月创造了一种新的编程语言. ...

  6. 如何写出优雅的代码?

    希望你的代码如同你本人一样优雅.:) 我们编写的代码,除了用于机器执行产生我们预期的效果以外,更多的时候是给人读的,这个读代码的可能是后来的维护人员,更多时候是一段时间后的作者本人. 如何能够写出优雅 ...

  7. 程序员如何写出高质量年终总结?

    干得好,也要说的好,程序员年终总结看这篇! 对程序员来说,这一年改过很多 Bug,写过很多功能,也重构过一些模块,经历了无数个需求的迭代,进行了无数次的提测,还偶尔加个班......那么如何体现在我们 ...

  8. 年薪10万与年薪100万的程序员,写出代码的区别

    编程是一门创造性的工作,是一门艺术.我们每天与代码打交道,为什么普通码农辛苦一年只拿十万,而高级架构师年薪百万.最主要的就是我们敲出来的代码有差别,差别在意大部分码农敲出来坏的代码,而高级架构师能敲出 ...

  9. 程序员如何写出更好的代码

    Martin Thompson是Java Champion称号获得者,同时也是一名高性能计算科学家.他说,为了写出更好的代码,程序员需要运用基本设计原则,阅读已有代码.在QCon London 201 ...

最新文章

  1. 《从问题到程序:用Python学编程和计算》——3.4 定义函数
  2. Python pip – error: invalid command ‘bdist_wheel’
  3. 数学--数论--HDU 12151七夕节 Plus (因子和线性筛)
  4. python2.面向对象.学生管理
  5. CF1286D-LCC【动态dp,数学期望】
  6. 价值80元的emlog博客用户注册插件
  7. Maven构建项目 — 知识点梳理
  8. webpack5不要再用url-loader了
  9. 干货!flask登录注册token验证接口开发详解
  10. tensorflow 模型权重导出
  11. React常用的命令解析
  12. 人工智能中的深度结构学习 Learning deep architectures for AI - Yoshua Bengio
  13. 今日头条 mysql_今日头条这么牛逼,用了什么技术?
  14. vue中使用富文本编辑器
  15. linux c 获取文件大小
  16. python 列表求最大值_Python找出列表中的最大数和最小数
  17. cesium 绘制轨迹
  18. Android审计平台,Android系统安全审计方法研究
  19. Android AOP 编程实践 javapoet + autoService
  20. Android Studio 打开Profiler后App闪退

热门文章

  1. 计算机换硬盘后 查启用时间,鲁大师怎么检测硬盘通电时间 硬盘使用时间查看方法介绍...
  2. 【深度学习】windows下安装TensorFlow
  3. 阿里云安装mysql8.0版本操作步骤
  4. 吐血整理阿里云安装MySQL8.0及远程连接失败问题
  5. 7000G机械软件教程,免费分享
  6. ABP 使用 IShouldNormalize 完成缺省值初始化
  7. LSTM进行房价预测
  8. 【捞】独立思考Justic: The Moral Side of Murder The Case of Cannibalism
  9. csv文件去掉最后的逗号_CSV文件/内容中的逗号处理
  10. iTextSharp中绝对定位如何指定字体样式?