Android代码规范:命名规范

原文:http://android.jobbole.com/83659/
编码规范对于程序员尤为重要,可以有效的帮助我们进行code review,提高代码的可读性,让其他人更快更彻底的理解代码。

一个软件的生命周期中,80%的花费都在于维护以及新功能的迭代,很多的时候都需要阅读代码,读自己以前写的代码,读别人写的代码,这样规范的代码优势就显示出来了,符合规范的代码可以让人简单快速的理解理解代码的意图。

代码规范先从命名规范开始,Android的命名规范主要涉及:Java源代码,xml文件,图片资源。

包名

首先说下Android包名的命名规则。

Andorid的包名一般采用域名的反转,单词全小写。域名为www.example.com
的包名为com.example,省略www

包名的开始是一个顶级域名,比如com,cn,org等,包名使用.做为分隔符。第二位一般是二级域名,也可以根据不同机构各自的命名。后面的命名可以用部门,项目等进行区分(也可以没有),例如:

com.example.project

在项目内可以根据功能不同,按照模块划分不同的包名,com.example.project.user
就是表示用户模块。

也可以根据层级的不同而划分不同的包名,比如:com.example.prokect.activity
,就是Acitivity相关的包。

当然也可以在不同层级里面再按照模块划分包名,比如:com.example.project.activity.user
,表示和用户有关的****Activity****。
总结,包名一般是以反转域名开始,后面跟有项目名称(缩写,也可以没有)。
后面可以采用的区分包名方式:

  1. 按照模块 com.example.project.user
  2. 按照层级区分 com.example.project.activity
  3. 层级下也可以在区分模块 com.example.project.activity.user

类和接口

类名是一个或多个单词组成,采用大驼峰命名,尽量要使类名简洁且利于描述,例如:SignInActivity,类名规则如下:

  • 大驼峰命名
  • 简洁而富有表达性
  • 尽量不使用缩写(广泛使用的单词除外,比如URL,XML…)
  • 多单词中采用 名词+动词的方式命名: LocationManage

对于缩写单词要全部大写比如:XMLManage

一个类如果继承了Android的组件,需在使用该组件的名称作为后缀,这样容易区分该类的作用,比如: SgnInActivity,UserInfoFragment,FileUploadService…

接口一般使用****I****开头,采用大驼峰命名规则,比如:IPullToRefresh。

变量

Android变量分为三种:成员变量,静态变量和常量。

成员变量

成员变量采用小驼峰命名规则,第一单词的首字母小写,其后的首字母大写。变量名一般不使用_和$开头。例如:
private Intent cropIntent;

变量名应简短且易于描述,选用规则尽量简单,易于记忆和联想。
尽量避免单个字符的变量名,除非是用于一次性的临时变量,临时的整形变量一般命名为 i,j,k,m,n。字符型的变量一般使用c,d,e。
对于View
变量的命名规则,如果View
是一个单词的,采用第一个单词小写的方式+对应View的描述进行,例如:

private View viewUserInfo;

如果是两个单词组成的View,比如:TextView,一般采用缩写的方式,例如:
private TextView tvUserName;一般情况下Button缩写为:btn。

静态变量

为了可以很方便的区分静态变量,静态变量的命名一般采用小写的s开头,后面单词的命名规则和成员变量保持一致,例如:

private static Map<String, String> sCacheStrings;

常量

常量命名规则一般是所有的单词都是大写,中间使用_(下划线)分割,例如:
private static final float SCALE_RATE = 1.25f;

代码中不允许出现单独的字符串或数字常量,比如xx.equals("1") ,单独的字符串或数字不利于后期的维护。如果需要使用数据或字符,请按照他们的含义封装成静态常量,或者使用枚举,for语句除外。

方法

方法命名规则采用小驼峰命名法例如:onCreate(),onRun(),方法名一般采用动词或者动名词。一般使用的方法名前缀。

  • getXX()返回某个值的方法
  • initXX() 初始化相关方法,比如初始化布局:initView()
  • checkXX()和isXX() 方法为boolean值的时候使用is或者check为前缀
  • saveXX() 保存数据
  • clearXX()和removeXX() 清除数据
  • updateXX() 更新数据
  • processXX() 对数据进行处理
  • dispalyXX() 显示某某信息
  • draswXX() 绘制数据或者效果

另外对于方法的其他一些规范:

  • 方法的参数尽可能不超过4个,需要更多的参数的时候可以采用class的方法
  • 方法参数中尽量少使用boolean,使用boolean传参不利于代码的阅读
  • 方法尽量不超过15行,方法过长,说明当前方法业务逻辑过于复杂,需要进行方法拆分一个方法只做一件事,
  • 如果一个方法返回的是一个错误码,可以使用异常
  • 不使用try catch 处理业务逻辑
  • 尽可能不实用null,替代为异常或者使用空的变量,比如Collections.emptyList()

Layout

Layout的命名规则需要和使用他们的组件对应,方便查找和维护,比如我们在创建一个用户信息的UserInfoActivity,对应的Layout的命名就应该是activity_user_info.xml

对应Andorid组件的Layout 命名规则:

  • Activity -> activity_user_info.xml
  • Fragment -> fragment_sign_up.xml
  • Dialog -> dialog_change_password.xml
  • AdapterView Item -> item_user.xml
  • Layout只是一部分 -> partial_stats_bar.xml

string和color

项目中使用的string,和color的值原则上都是必须放在strings.xml
和colors.xml
中,不要放在Java代码中,这样的好处是可复用,提高维护性,减少非必要的代码。

xml
的资源命名,字母全部小写,多个单词之间使用_(下划线)分割.比如:
example

建议color的命名中体现其ARGB
值,比如:

feb749这样的写法对于代码提示更加的友好,有利于对照标注图查找颜色值。

id命名

layout中使用的id 的单词要全部小写,单词之间使用下划线分割,使用名词或者名词词组,应该通过id的命名可以直接理解当前的View 要实现的功能.

例如:

@+id/tv_user_name_show

id命名的第一个单词使用View的缩写,如果View只是一个单词,缩写就是当前单词。一般Button的缩写为:****btn****。

Drawable命名

Drawable的命名规则根据使用的控件来命名,控件的缩写在前面,后面使用表示其功能的一个或者多个单词,中间使用使用_下划线分割。

  • ****Action bar****使用ab_ ,比如:ab_stacked.png
  • ****Button**** 使用btn_
  • ****Dialgo**** 使用dialog_
  • ****Divide**** 使用 divider_
  • ****Icon**** 使用 ic_
  • ****Menu**** 使用menu_
  • ****Notification****使用 notification_
  • ****Tabs**** 使用tab_

Drawable是有多个状态的,在命名中体现出状态的不同:

  • ****Normal**** 对应_normal结尾,比如btn_order_normal.9.png
  • ****Pressed**** 对应_pressed 结尾
  • ****Focused**** 对应_focused 结尾
  • ****Disabled**** 对应_disabled结尾
  • ****Selected**** 对应_selected结尾

其他资源文件的命名需要遵守Android的规范即可,比如arrays.xml数组文件,dimens.xml分辨的配置,style.xml样式的配置,资源文件的ID命名规则都是才是字母小写,使用下划线分割的原则。

参考:https://github.com/ribot/android-guidelines/blob/master/project_and_code_guidelines.mdhttp://source.android.com/source/code-style.htmlhttps://google.github.io/styleguide/javaguide.html

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

推荐阅读更多精彩内容

  • 编码规范对于程序员尤为重要,可以有效的帮助我们进行code review,提高代码的可读性,让其他人更快的理解代码...
    姜家志阅读 2,199评论 0 7
  • 编码规范对于程序员尤为重要,可以有效的帮助我们进行code review,提高代码的可读性,让其他人更快的理解代码...
    allencaicai阅读 556评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,579评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,357评论 25 707
  • 前几天,认识一位新朋友,刚见面聊了没几句,对方就问我:“你结过婚吗?” 听到这个问题的我一脸惊愕地看着他说:“为什...
    赫曼妮阅读 1,089评论 4 7