开发经验漫谈 -- 编码规范

这几期想和大家分享下我自己在开发时的一些经验,这次来说说关于代码规范。

什么是代码规范

我理解的代码规范,是一个标准,让写代码的人按照这个标准来开发。

例如php的psr1(https://www.php-fig.org/psr/psr-1/)和psr2(https://www.php-fig.org/psr/psr-2/

为什么需要代码规范

万事万物必然有其存在的意义,这里说下我的理解:

  1. 这里先说明很重要的一点,那就是代码是写给人看的,并不是机器,所以说代码要让别人好理解。
  2. 我们多数情况下都是团队开发,所以大家都约定好一个标准,更加有利于团队代码的可维护性。
  3. 团队中有老人离职、有新人加入,从代码规范中是可以看到这个团队的文化的传承的。
  4. 对自己也是个约束,不要太随意了。

如何制定规范

制定步骤:

  1. 首先看是否有官方规范。一些较新的编程语言通常会有自己的一些规范,例如Golang,大家可以参考官方的Effective Go(https://golang.org/doc/effective_go.html),建议遵守。
  2. 其次看是否有权威的、认同度高的规范。通常使用较广泛的语言会这样做,如php的psr1、2,建议遵守。
  3. 之后,才是我们团队来制定自己的规范。

团队规范注意:

  1. 尽量避免一言堂。因为是团队规范,所以是需要得到大家的认同的。
  2. 要经常反思,不好的地方和团队成员讨论不断调整。其实这也是要求团队成员开发时不断反思的一个过程。
  3. 规范简单易懂。

参与过的规范实例

这里举两个自己参与过的实例:

Golang项目

我们团队第一次使用Golang开发项目时,当时制定了这样的一套规范:

  • 变量
  1. 多个词之间用"_"(下划线)连接,如:prj_home
  2. 可导出全局变量每个词的首字母均大写,如:Prj_Home
  3. 包内部全局变量用“_”(下划线)开头,单词小写,如:_prj_home
  • 函数
  1. 函数名称驼峰式,如:listPrj
  • 类型
  1. 类型名用“t”开头,如:t_prj_item
  2. 可导出名称用“T”,如:T_Prj_Item
  3. 接口类型用“i”开头,如:i_logger
  4. 可导出接口类型用“I”,如:I_Logger
  5. 多名词规则同“变量命名规则”

当时制定这套规范时,我们对Golang的使用还是刚刚起步,很多不理解的地方,所以这套规范现在看来,很多地方都不合适,但在当时,还是起到了很大的作用。

  1. 这套规范帮助我们这些初学者在当时统一了风格,避免了混淆。
  2. 后续的同学也能很快理解当时的项目,所以项目虽早,但现在也很好的运行着。
  3. 随着Go越用越多,我们不断更新我们的规范,从命名上,项目的组织上,都一直经历着变化,目前最新可参考gobox项目代码(https://github.com/orgs/goinbox/dashboard

PHP项目

这个项目也是我们团队的一个编码规范的典型运用,规范如下:

  • 综述

对于psr标准中已规定的部分,请遵照执行,这里不再赘述。
这里主要定义现有psr标准中未规范的部分。

  • 变量

统一使用驼峰式

  • 数组key

使用下划线分隔多词

  • 判断时常量在等号左边还是右边

统一放在等号右边

if ($a === 0){}
  • 函数中参数如果提供默认值,等号两端是否有空格

function foo($a = 0){}

这个项目的编码规范由当时我们团队的五个人共同制定,我们列出psr中未规定的部分,每个人陈述自己的观点,然后举手表决。

结束语

规范不是目的,只是一种手段,好的规范十分有助于编程人员培养良好的编程习惯。

最后,请记住一点:代码是写给人看的,机器只需要0和1。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • Welcome 目前网络上充斥着大量的陈旧信息,让PHP新手误入歧途,传播着错误的实践和糟糕的代码,这必须得到纠正...
    layjoy阅读 21,655评论 7 118
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,389评论 25 707
  • 一天,正在一家小书店随意翻看,一个小男孩挤到了我旁边,后面紧跟着他的妈妈。男孩拿起了《侏罗纪公园》,妈妈拿起了另一...
    加加妈妈阅读 4,024评论 10 12
  • 你还记得当年自己13岁时,做过什么值得记忆的事吗? 13岁?9岁读书的我还在小学,懵懵懂懂,跳皮筋儿,玩迷藏这些游...
    蓝蝶landie阅读 757评论 1 3
  • 煮一壶茶;轻点一盏灯;细翻一册书。闭上眼,在茶香书墨中,逆着时间的长河去回溯流年。 在青春转折的诗篇里,我曾看过很...
    那只不喜欢吃鱼的猫阅读 425评论 0 2