Minecraft(我的世界)中文论坛

 找回密码
 注册(register)
查看: 3200|回复: 1

[软件开发讨论] Java命名规范(引用自Google Java Style Guide)

[复制链接]
发表于 2016-7-17 21:47:11 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 ustc_zzzz 于 2016-7-17 22:06 编辑


引言

发这个帖子的原因之一呢,其实是最近本人看到了很多人的Java代码,然而它们的命名方式我只能用四个字来形容:惨不忍睹

本人本以为Java命名约定这种东西理应是Java基础的一部分,但是很多人似乎都没有这个概念,所以这里本人就引用了流行度和认可度比较高的“Google Java Style Guide”作为Java命名规范:
https://google.github.io/styleguide/javaguide.html
一个很不错的中文翻译:
http://www.hawstein.com/posts/google-java-style.html

也就是说实际上从MinecraftForge到CraftBukkit,基本所有的Java代码,至少在命名规范上,是和上面链接中描述的一致的。

当然,“Google Java Style Guide”也约定了一些Java代码中空格,缩进、换行等的规范,不过本人知道:虽然里面约定使用两格缩进,但还是有不同的人喜欢使用四格缩进、八格缩进、甚至Tab缩进的,虽然里面约定大括号不换行,但还是有很多人(比如正在这里码字的本人)喜欢使大括号隔行,等等。

然而,站在命名约定的角度上来讲,把C语言和Python等经常使用的小写下划线的命名方式,和C#等把方法名属性名等首字母大写的习惯和约定,等等,再带到Java的代码中来,就有些格格不入了。所以本人只把上面的链接中的第五部分(https://google.github.io/styleguide/javaguide.html#s5-naming)搬了过来,并稍稍整理、补充和简化了一下,调整了一些在Minecraft相关开发中可能不太必要的部分。

当然,这些约定并不是强制执行的,不过遵守这一命名规范的Java代码的可读性,和不遵守甚至部分遵守部分不遵守的代码可读性是不一样的。还是那句话:It is up to you.


正文

对所有标识符都通用的规则

标识符只能使用ASCII字母和数字,一些不太常见的场合会使用到下划线,因此每个有效的标识符名称都能匹配正则表达式“\w+”。
使用英语单词或词组,不要出现汉语拼音。

包名

全部小写,连续的单词只是简单地连接起来,不使用下划线。
例如:blusunrize.immersiveengineering、vazkii.botania、等。

类名

以大写驼峰式(UpperCamelCase)的风格编写。每一个单字的首字母都采用大写字母,并不包含下划线等任何字符直接连接而成。
例如:ItemCoal、BlockRedstoneComparator、EntityCreeper、等。
类名的词性不做要求。

方法名

以小写驼峰式(lowerCamelCase)的风格编写。
例如:getUnlocalizedName、register、addRecipe、等。
方法名通常是动词或动词短语。

常量名

命名模式为全部字母大写,用下划线分隔单词。
例如:DOUBLE_STONE_SLAB,BOOKSHELF,BRICK_BLOCK、等。
常量总是被标记为static final的,包括一些枚举值(Enum)等。
常量一般使用名词或者名词短语命名。

非常量字段名

和方法名一样使用小写驼峰式。
例如:maxDamage、maxStackSize、isRemote、等。
非常量字段一般使用名词或者名词短语命名。

参数名

使用小写驼峰式风格编写。
例如:pos、facing、worldIn、等。
注意不要使用单个字母。

局部变量名

使用小写驼峰式风格编写。
例如:entity、finalPathPoint、i、等。
比起其它类型的名称,局部变量名可以有更为宽松的缩写,一些用于循环计数等临时变量可以使用单字母。
然而,即使局部变量被声明为final,也不应该把它示为常量,自然也不能用常量的规则去命名它。

类型变量名

可以使用单个的大写字母表示类型,后面可以跟一个数字。
例如:T、S、R、T2、等。
或者以类名加一个大写的T表示。
例如:RequestT、FooBarT、等。

大小写驼峰式

1. 把短语转换为纯ASCII码,并且移除任何单引号。例如把“Biomes O'Plenty”变成”Biomes OPlenty”。
2. 把这个结果切分成单词,并在空格或连字符等标点处分割开。如果一个单词在日常使用中已经拥有合适的驼峰式形式,那么把这单个词切分成若干个词是合适的,比如把“TileEntity”分隔成“tile entity”,需要注意诸如“IPv6”这种是一个单词,不应该予以拆分。
3. 然后小写驼峰式把除首个单词外的所有单词首字母大写,而大写驼峰式把它们的首字母全部大写,剩下的字母全部小写,例如:

"XML HTTP request" => "XmlHttpRequest"
"new customer id" => "newCustomerId"
"inner stopwatch" => "innerStopwatch"
"supports IPv6 on iOS?" => "supportsIpv6OnIos"
"YouTube importer" => "YouTubeImporter","YoutubeImporter"(不推荐,本人吐槽:Google在打广告?)

4. 注意:在英语中,某些带有连字符的单词形式不唯一。例如:“nonempty”和“non-empty”都是正确的,因此方法名“checkNonempty”和“checkNonEmpty”也都是正确的。

评分

参与人数 6人气 +9 金粒 +51 收起 理由
丶皇天 + 2 水可载舟噫可zzzz
z25096708 + 2 + 10 MCBBS有你更精彩~
RecursiveG + 1 + 30 已加入全家桶
andylizi + 2 Google大法好√ 表示整个规范早已读完.
staarcat + 1 规范命名好习惯~
henry5041 + 2 + 10 Mcbbs有你更精彩~

查看全部评分

发表于 2016-7-18 12:58:15 | 显示全部楼层
沙发?
前来给4z触助兴
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 手机版本

GMT+8, 2018-10-21 18:15 , Processed in 0.123514 second(s), 6 queries , Memcache On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标。本站与Mojang以及微软公司没有从属关系。

© 2010-2017 我的世界中文论坛 版权所有。本站原创图文内容版权属于原创作者,未经许可不得转载。

快速回复 返回顶部 返回列表