Soft_Job 板


LINE

大家好,有一些coding style的议题想跟各位分享与讨论 勒布朗克法则(LeBlanc’s Law)説:Later equals Never 你心想着待会儿再回来整理程式,但其实永远不会再回头改的 最近想要整理出一些guideline跟同仁分享, 想说这样大家的程式可读性提升,对团队的合作会更好, 不过我想先抛砖引玉,分享一些我整理出来的心得, 希望大大们可以分享一下自己的coding style 或是有更好或更多的撰写程式的规范跟原则。 ====================================== 下方先是我整理的资料分享,欢迎大家也分享自己的coding style 1. Boolean变数或function的命名方式 Boolean变数或function的开头必须使用is, can, has, should, 但如果本身是形容就不需要,像是enabled, done就无需用is开头 2. 用介系词(of,for,from,on…)来组变数名称 这件事情但起来单纯,但很多时候大家都会忽视介系词硬组变数名称, 像是daysUntilDeadline就有可能被命名成DeadlineDays,如易造成误解, 以下是我找到一些不错的范例 var daysSinceModification = 3; // 在修改已过了3天 var workDaysPerWeek = 5; // 每周工作5天 var daysUntilDeadline = 10; // deadline前还剩10天 3.使用更具体的单位 delayedTime代表的是delay的时间,但其实单位是秒数, 所以命名上最好使用更具体的单位来优化这个命名,改写成delayedSeconds会更好 4.舍弃i,j,k,使用更好的Iterator 一般for回圈中我们都会使用到i, j, k,这其实不是不行, 但是如果i, j, k分别代表parent, children, toy, 那就可以用pi, ci, ti来取代i, j, k,这样程式码不会变长太多, 可读性提高也较容易debug 5.Function Name的prefix都是动词 基本上function名称全都是「动词」 开头但如果像是getCellSize()或calcCellSize(),可以直接省略开头的动词, 直接使用cellSize()即可,不过也有人坚持不能用名词开头,基本上团队统一即可。 6.缩写真的方便但并不是最好 因为不想打太长的变数或函数名称,大家总是在缩写, 但是有些缩写很容易让人搞混,对於原本就在维护这份程式的工程师或许还好, 但新进工程师会很容易困惑。 使用像是dns,url这些众所皆知的词没问题,只有自己团队才看得懂的缩写, 除非必要,不然尽量避免使用。 不过我觉得这个看情况而定,重点是一定要有一份解释缩写的文件比较好。 7.如何写注解 *在档案的最前头写上整个程式档案大致是如何运作的档案注解 *除了解释程式运作的原理外,还可以描述为什麽要用这样子的写法来写, 可能是效能上的需求之类的 *使用 TODO FIXME 等注解标签,TODO可以标记尚未制作或是需要优化的部分, FIXME是不能运作需要修复的部分,其实我知道还有HACK, XXX 等标签, 不过我觉得好像都归类在TODO比较方便,不知道大家的习惯是如何? *在设定常数的时候给予注解其实也能帮助理解,让开发者更有概念, 像是下面程式注解说明为什麽要设定为1000的理由 // 加上合理的限制 - 没有人能读那麽多文章 const int MAX_RSS_SUBSCRIPTIONS = 1000; 8.封装条件 如果if()里面有超长一串的判断式,可读性会超差, 所以可以把这个判断式用boolean变数装起来再判断 boolean isMan = (user.age >= 18 && user.gender == ‘male’); if (isMan){ // 做一位男人该做的事 >///< } ====================================== 其中最想请教大家的是function前方动词的分类 Clean Code这本书上有说 Pick one word for one abstract concept and stick with it. 不过比较没人整理出较为通用的词库对应表, 我知道这个本来就没官方解答,但是我想听听看各位的经验, 整理出我自己的一套词库,以下是我目前整里的词库 fetch:从远端(透过API)获取资料,例如:fetchUsers() load:从本地端加载资料,例如:loadFile() calculate/calc:通过计算获取资料,例如:calcBMI() show:显示物件,如showModal()、showDialog() remove:将资料之间的关系移除,资料本身还是会存在 delete/destroy:将资料删除,资料将会不存在 on:定义event的时候使用,像是onClick,onChange handle:当onClick之类的event发生时所触发的function, 例如:handleClick,如果click後面有受词的话, 这将受词移到click前方* 例如:handleButtonClick 剩下还有哪些词是大家常用的呢?还请各位大大不吝分享, 我在下面放一些可能会用到的词,大家是怎麽给这些词定义他专属的concept, 或是有哪些没提到的也可以补充一下,麻烦大家给点意见了XD get/set create: insert append add append edit: modify update complete: finish done end send: deliver, dispatch, announce, distribute, route find: search, extract, locate, recover start: launch, create, begin, open make: create, set upm build, genernate, compose, add, new ----- Sent from JPTT on my iPhone --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.140.152.183
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1525745915.A.076.html ※ 编辑: allenwang15 (123.51.169.72), 05/08/2018 10:27:45
1F:推 t64141: 我是直接参考微软的: 开发类别库的设计方针 05/08 10:35
2F:→ johnny94: 准备鸡排先 05/08 12:06
3F:推 v9290026: 推 05/08 12:29
4F:推 xji4m3: 中间有个小错字deadline 唷 05/08 12:36
5F:推 del680202: 你菜虫掉到地上了 05/08 12:42
6F:→ b81314: 公司不是都会规范吗 05/08 12:51
7F:推 evan176: 推 05/08 12:54
8F:推 stfang925: 推 05/08 13:00
9F:推 ap954212: 推推 05/08 13:03
10F:推 Masakiad: 回楼上 公司规范跟知道订规范後面的原因是两件事啊 05/08 13:19
※ 编辑: allenwang15 (123.51.169.72), 05/08/2018 13:30:31
11F:推 Argos: 勒布朗OP 05/08 13:32
※ 编辑: allenwang15 (123.51.169.72), 05/08/2018 13:36:38
12F:推 hazih: 推 不过iPhone用JPTT编辑很猛耶 05/08 14:34
13F:推 a926: 用中文没烦恼(误 05/08 14:44
14F:推 AmosYang: Re: 动词,可参考我这篇 #1Qi4OxGH (Soft_Job) 里的参 05/08 15:11
15F:→ AmosYang: 考资料: 「微软 PowerShell 指令动词列表」 05/08 15:11
16F:推 qqkerk: 居然还没战起来@@ 05/08 15:33
17F:→ menshuei: 很不错收起来了 05/08 15:41
18F:推 NCUking: code complete 有一整个章节在讲这种 05/08 16:26
19F:推 jay123peter: 推 05/08 16:52
20F:推 oas: 推推~ 05/08 17:53
21F:推 crazybad: 推 05/08 18:08
22F:推 x51811danny: 补充动词:parse 05/08 18:35
23F:推 paulshain04: bindEvents() 05/08 19:29
24F:→ eva19452002: 我都用匈牙利命名法 05/08 19:39
25F:→ eva19452002: 而coding style则采用java style(我会被oracle告吗?) 05/08 19:40
26F:推 mikejhou: 有同事之前被雕function不懂 然後他不爽就下次命名打Fu 05/08 19:49
27F:→ mikejhou: ckyouXXX XXX是function 05/08 19:49
28F:推 O187: 我的原则就是命名越短越好 05/08 20:09
29F:推 louis70109: 推 05/08 21:00
30F:推 tom19830924: 如果是写Objective-C的话这蛮自然就会了 有些人会觉 05/08 21:06
31F:→ tom19830924: 得这样很罗说 但我是觉得方法名称念起来就想在念一段 05/08 21:07
32F:→ tom19830924: 英文 还蛮直觉的 05/08 21:07
33F:推 shiauji: 推 整理的好文 05/08 22:00
34F:→ pigcat1315: isMan 以前有人跟我说如果要省时就别先判断XD 05/08 22:30
35F:推 ymcheung: 推好文! 05/08 22:32
36F:推 yupog2003: 推好文 05/08 22:36
37F:推 bill0205: 推 \ 05/08 22:40
38F:→ y3k: 匈牙利命名法是mUser这种吗... 说实在我不太懂为什麽这样不乾 05/08 22:53
39F:推 bill0205: 我比较想问各位 变数命名时候 假使是英文单字过长 05/08 22:54
40F:→ bill0205: 通常大家都怎麽缩写...比较常有这困扰 05/08 22:54
41F:→ y3k: 脆取user算了=..= 05/08 22:55
42F:推 ymcheung: 之前 CSS 用缩写,隔个星期就会忘记那是三小了 05/08 22:58
43F:→ ymcheung: 後来都不缩 05/08 22:58
44F:推 e920528: 推 05/08 23:00
45F:推 rollr: 很不错 05/08 23:15
46F:推 yupog2003: 英文单字过长就宣告的旁边加个注解?我是这样拉 05/08 23:19
47F:→ yupog2003: 一样缩写就是了 05/08 23:20
48F:推 akai1024: 第8点,直接在user写一个isMan()的函式即可 05/08 23:35
49F:推 ID3238: 推分享 05/08 23:36
50F:推 tailau0: 可参考 Google Java style guide: https://goo.gl/z2SrCQ 05/08 23:37
51F:推 hiJackylin: 推用心 05/08 23:44
52F:推 pigcat1315: 其实不用刻意缩写阿 真的很容易看不懂 05/09 00:03
53F:推 vi000246: 过长就过长啊 我自己是喜欢在单字前加上型别 05/09 01:18
54F:→ vi000246: 虽然clean code说别这样用 但是用自动完成很方便 05/09 01:19
55F:→ vi000246: 就算要改型别 直接右键重构就好了 05/09 01:19
56F:→ vi000246: 或是一些控制项 combobox用cb开头 textbox用tb开头 05/09 01:21
57F:推 CaLeLu: 先推+收藏XD 05/09 03:13
58F:推 wanlinlin: 推 05/09 07:54
59F:→ dm33: 推 05/09 09:21
60F:推 ppppman: 推 05/09 09:34
61F:推 wilson85771: 推 05/09 09:44
62F:推 enthos: 我喜欢推文就放得下的程式码,这是multi-switch \ m s -- 05/09 10:01
63F:→ enthos: : mmatch >r ( swap r@ swap s:search null? if 2drop 05/09 10:01
64F:→ enthos: drop else drop swap w:exec then ) m:each drop rdrop ; 05/09 10:02
65F:推 DingDang827: 推 05/09 10:30
66F:推 dogalan: 推 05/09 11:14
67F:推 tz5514: 推 05/09 18:12
68F:→ AvatarH: 变数活不过一页的用小写和底线串,活不过一个函数范围的 05/09 21:48
69F:→ AvatarH: ,用驼峰式命名法。全域变数用底线当开头,全域静态变数 05/09 21:50
70F:→ AvatarH: 用全大写。简单的说看变数长怎样,就知道这个变数的存活 05/09 21:51
71F:→ AvatarH: 范围。至於命名方法看规定,上面的方法都有可能碰到。 05/09 21:52
72F:推 wifirts: 实用推 05/09 22:46
73F:推 pardo: 推 05/10 00:22
74F:推 Raymond0710: 感觉是从The art of readable code这本书整理的, 谢 05/10 09:12
75F:→ Raymond0710: 原po整理 05/10 09:12
76F:推 CRPKT: 一个概念只用一个字满重要的,我有时候会从同义字典里挑 05/12 00:15
77F:→ CRPKT: 如果还是无法让别人一眼就了解概念就再加注解 05/12 00:16
78F:→ CRPKT: 另外也可以 google 一下别人都用哪个字来表达同样的概念 05/12 00:17
79F:推 overhead: 推 05/12 13:10
80F:推 chendkkkk: 推 05/12 22:17
81F:推 moon2519: 推 05/13 10:06
82F:推 Ghamu: 我遇到真的本身太长的英文单字都会Google abbreviation 05/14 01:36
83F:→ Ghamu: 以前也爱用handle 可最近想想handle 这字什麽意思也没说 05/14 01:40
84F:→ Ghamu: 所以如果按钮是要show dialog 05/14 01:40
85F:→ Ghamu: 我就用shoeDialog 不会用handleClick 05/14 01:40
86F:→ ChoDino: 最後一题,命名是跟着你的英文字汇量改变的,而不是定几 05/14 21:21
87F:→ ChoDino: 个每次都拿来套用,单字认识多,就会找到最适合的语意。 05/14 21:21







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether 或 站内搜寻

TOP