[讨论] 代码风格

不同视角、不同观点、深度探讨,禁止人品和道德攻击

代码风格

函数、变量名中的有多个单词,则应该使用下划线间隔开。单词太多或太长,应该使用常见缩写
38
60%
函数、变量名中的有多个单词,则使用单词首字母大小写变化来断词
25
40%
 
总计票数: 63

头像
猛将兄
帖子: 2052
注册时间: 2005-10-19 17:33

#31

帖子 猛将兄 »

Strange 写了:
1。造成理解混淆。一个I,其实可以代表Interface,也可以代表Integer,事实上,早期的I是代表Integer,后期的I是代表 Interface,人为产生软件开发代沟。更不要说P有的代表Poiter,有的代表一个自己的Class叫Person的事情了
2。 完全没有必要。这种写法最主要是早期编辑器非常不好用的情况下,为了清晰而产生的。可是正如1所言,现在已经会产生混淆了。当下用emacs或者vim或者任何一种IDE都可以很清楚地标识类型,何苦自己为难自己
3。以后再说,我想看看你们说的好处在哪里
我一直觉得,没什么不好
但至少觉得这个1和2不成立,想听听下面的
网上一般认为不好也就是繁琐,其他也没啥

1。
每个项目有每个项目的coding style,看明白了之后,这个项目中不会发生混淆,除非程序没完全按照代码规范来做
一个项目中i既代表integer又代表interface的话,只能说代码规范不好了
退一步说,如果觉得这个辅助的信息没用,读代码的时候完全可以自己忽略,就当没看见,这样和一个普通的变量名称除了繁琐以外有什么特别的区别?
2。
基本没必要还有道理,完全没必要就太绝对了
如果代码打印出来呢?
即使是vim,想要简单方便的很清楚地标识类型的方法是没有的,如果有,一定请教我一下
vs2005记得也没有能直接从ide中直接表示变量类型的方法
3。
我认识的匈牙利的缺点
繁琐,不方便修改。变量长度变长,如果修改变量类型的话,改动大
但是,这个到正是现代ide所能弥补的一点
ide或者emacs/vim都有补完,有方便的搜索/替换功能
4。
所以,虽然网上骂匈牙利命名法的一片,但我觉得,这也只是一个命名法,说不上多好,但也说不上多差
根据程序的需要,用/不用,或者用部分,都是合理的选择
在现实项目中,已经因为这种怪异的命名方法碰到问题了。不同背景,不同年龄,只要是不同的人,就有不同的理解。好多次开会开到一半,才发现此I非彼I,此P非彼P
至于说IDE的代码类型标识功能,就是用不同颜色不同字体,一目了然。而打印出来,非要这么说,我也只能强词夺理一把,我还能用粗体黑体斜体和他们的组合来标识不同类型呢。Javadoc和Oxygendoc都能根据不同类型用不同颜色和字体标识,你用过的话就知道了
至于其他的,另外一个麻烦是可读性差。这个相当主观。在没有更好的命名方法出现之前,这不是问题。但吃过山珍之后,菜渣实在吃不下去
kevin.c
帖子: 145
注册时间: 2008-04-01 12:28

#32

帖子 kevin.c »

greco 写了:
kevin.c 写了:第一种 开源软件大多是这种风格
第二种 M$专用风格

我自己写软件用第一种 公司项目只能用第一种
疼狠第二种 看着就不爽
?? 照你这么说,许多Java 的开源代码都是 M$ 分格?
不会JAVA 写C/C++的飘过
头像
Strange
帖子: 1824
注册时间: 2006-05-19 9:54
来自: Shanghai

#33

帖子 Strange »

猛将兄 写了: 在现实项目中,已经因为这种怪异的命名方法碰到问题了。不同背景,不同年龄,只要是不同的人,就有不同的理解。好多次开会开到一半,才发现此I非彼I,此P非彼P
至于说IDE的代码类型标识功能,就是用不同颜色不同字体,一目了然。而打印出来,非要这么说,我也只能强词夺理一把,我还能用粗体黑体斜体和他们的组合来标识不同类型呢。Javadoc和Oxygendoc都能根据不同类型用不同颜色和字体标识,你用过的话就知道了
至于其他的,另外一个麻烦是可读性差。这个相当主观。在没有更好的命名方法出现之前,这不是问题。但吃过山珍之后,菜渣实在吃不下去
这还是因为开始的时候代码规范没统一吧,说了用匈牙利法,但是又没有规定怎么用

默认会用不同颜色不同字体表示不同类型变量的ide我还没见过,哪个编辑器能做到这样?
即使vim也恐怕很难做到

那么,更好的命名方法是什么呢?

那个...前面说的还有其他很多缺点呢?
ニンニク入れますか?
x60 with gentoo
flyinflash
帖子: 2376
注册时间: 2006-09-21 14:28

#34

帖子 flyinflash »

嘻嘻,还真打起口水战来了

楼上两楼透露一下前景,参与过的项目,或者写过的程序,让自己更的说服力

仔细看,上面没有使用到实例和引用论证,明显地,说理论证是不行的:D:D:D
头像
bird
帖子: 765
注册时间: 2006-09-04 10:45
联系:

#35

帖子 bird »

第2个,用java的支持下
头像
Strange
帖子: 1824
注册时间: 2006-05-19 9:54
来自: Shanghai

#36

帖子 Strange »

flyinflash 写了:嘻嘻,还真打起口水战来了

楼上两楼透露一下前景,参与过的项目,或者写过的程序,让自己更的说服力

仔细看,上面没有使用到实例和引用论证,明显地,说理论证是不行的:D:D:D
楼主在挑拨离间呀 :D
不战的,问问题

另外很明显,没有什么特别的实例,不管那种命名法都大量用在各种程序中
ニンニク入れますか?
x60 with gentoo
flyinflash
帖子: 2376
注册时间: 2006-09-21 14:28

#37

帖子 flyinflash »

嘻嘻,第一种始终占上风
头像
HuntXu
帖子: 5776
注册时间: 2007-09-29 3:09

#38

帖子 HuntXu »

不行啊~转到灌水去~lz老挑拨哦 :lol:
HUNT Unfortunately No Talent...
everyoung
帖子: 246
注册时间: 2007-09-08 23:06

#39

帖子 everyoung »

接口前缀用大写,I就表示interface
变量前缀用小写,i就是integer
匈牙利命名法中,整形变量的前缀是n,不用i
除了VC用MFC写程序,基本不用匈牙利命名法了
头像
异域追梦者
帖子: 424
注册时间: 2008-02-18 0:25
联系:

#40

帖子 异域追梦者 »

个人习惯而已
图片
头像
danath
帖子: 5
注册时间: 2005-06-10 10:33

#41

帖子 danath »

第二个选项只是说用大小写变化断词而已,为什么大家都认为还要包含类型前缀?我选第二个,但决不使用类型前缀(后缀)。
poet
帖子: 2841
注册时间: 2006-09-11 22:47

#42

帖子 poet »

猛将兄 写了:两种都不错,我经常混用,因为c和java混着写,null和NULL经常都会混用
怎么没人提这个世界上最扯淡的命名方法,非得在结构名或者类名前面加个东西代表他是什么
比如
IAbc说明是Interface接口
StrABC说明是String
绝对是世界上最扯淡的命名方法。关于他的荒谬,我可以写出最少十条来
匈牙利命名法是历史问题,Linux内核代码的编程规范已经明确声明不允许使用匈牙利命名法,显然你没有必要用这种方式抵抗。我的抵抗方式更有效:我经过论证匈牙利命名法的弊端,努力促成了公司制定新的编码规范,在我们公司的规范中规定:严禁把变量类型写到变量名中,从而完全废止了整个公司任何软件项目使用匈牙利命名法。——我的努力是否比你的努力有效得多?

至于下划线断词法和驼峰断词法,各有优缺点,下划线断词法的优点是阅读起来比较自然,缺点是不适合搜索。驼峰断词法的优点是适合进行不分大小写的搜索,缺点是阅读和书写起来稍嫌困难。——所以我在公司规定:可以选择任何一种断词法,但是必须保证同一个模块内部的一致性。
tamsun
帖子: 451
注册时间: 2006-07-07 21:07

#43

帖子 tamsun »

只java和js的(也写过一些c++,n年前了)发表一下意见:

1. 下划线断词法和驼峰断词法,各有优缺点吧。
至于是否可读,全看习惯了,比如我习惯看驼峰断词法,让我去看下划线断词法的代码,总有比较晕的感觉。特别是在做UML设计的时候怎么看怎么不舒服。纯习惯问题。

2. 比如大小写的问题,写java的都知道本来就有一些规范,例如Class首字母大写,属性和方法首字母小写。

3. 命名是否要体现类型,完全没有必要。当然写C的习惯如何我不清楚,写java的一般用IDE,如ls,或者lss,或者lsss说的,完全可以配置code style来体现。

当然自己在写代码的时候某些private的属性也会少量采用下划线断词法,不过一般是以下划线开头的,例如 _xx_xx,其余一律用驼峰断词法。

其实我倒是特别想知道大家写 SQL 的命名规范,哈哈。因为写sql我的习惯正好是下划线断词法。

所以我感觉上,如果我写脚本性质的代码,会用下划线断词法,写象java或者c++的时候,会用驼峰分词法.
头像
karron
帖子: 6226
注册时间: 2005-06-11 14:03
来自: 不明真相的群众
联系:

#44

帖子 karron »

同上. 脚本比较倾向下划线断词法, c#类名,方法, 属性等等一定是pascal命名. 变量, 参数camel命名.

sql 表名, 字段我采取pascal命名. 关键字一般全小写或者全大写, 现在一般小写用得多.
我的blog,关于技术,软件,linux,vim <---- 所有博客均被河蟹.
头像
karron
帖子: 6226
注册时间: 2005-06-11 14:03
来自: 不明真相的群众
联系:

#45

帖子 karron »

另外, 极度讨厌匈牙利命名法. 不过interface前面是绝对要加上I的.
我的blog,关于技术,软件,linux,vim <---- 所有博客均被河蟹.
回复