Minecraft(我的世界)中文论坛
标题: Java命名规范(引用自Google Java Style Guide)
作者: 土球球 时间: 2016-7-17 21:47
标题: Java命名规范(引用自Google Java Style Guide)
本帖最后由 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”也都是正确的。
作者: 0x3B800001 时间: 2016-7-18 12:58
沙发?
前来给4z触助兴