已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android开发编码规范目 录1 概述42 命名方法42.1 标识符命名法42.2 命名原则42.3 英文缩写原则42.4 单词缩写原则53 命名规范53.1 包(packages)53.2 类(classes)63.3 接口(interface)63.4 方法(methods)63.5 变量(variables)73.6 常量(Constants)83.7 资源文件(图片drawable文件夹下)83.8 资源布局文件(XML文件(layout布局文件)93.9 动画文件(anim文件夹下)93.10 资源ID(resourcesid)93.11 layout中的id命名103.12 activity中的view变量命名124 注释124.1 文件注释124.2 类注释124.3 方法注释124.4 类成员变量和常量注释134.5 其他注释134.6 XML注释135 代码风格135.1 缩进135.2 空行135.3 行宽146 规约146.1 方法146.2 参数和返回值146.3 神秘的数146.4 控制语句146.5 异常的捕捉处理156.6 访问控制157 约定俗成157.1 变量赋值157.2 圆括号167.3 返回值167.4 条件运算符?前的表达式168 21种代码的坏味道178.1 Duplicated Code178.2 Long method178.3 Large Class178.4 Divergent Change178.5 Shotgun Surgery178.6 Feature Envy178.7 Data Clumps178.8 Primitive Obsession178.9 Switch Statement178.10 Parallel Inheritance Hierarchies178.11 Lazy Class188.12 Speculative Generality188.13 Temporary Field188.14 Message Chain188.15 Middle Man188.16 Inappropriate Intimacy188.17 Alternative Classes with Different Interfaces188.18 Incomplete Library Class188.19 Data Class188.20 Refused Bequest188.21 Comments199 ANDROID编码规范建议191 概述为了提高代码的可读性以及更好的团队分工合作,便于在日后的代码审查和修改过程中减少浪费时间,因此制定本编码规范,统一编码风格。2 命名方法2.1 标识符命名法标识符命名法最要有四种:v 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写。v 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字母大写v 下划线命名法:单词与单词间用下划线做间隔。v 匈牙利命名法:广泛应用于微软编程环境中,在以Pascal命名法的变量前附加小写序列说明该变量的类型。 量的取名方式为: + + 范围前缀,类型前缀,限定词。2.2 命名原则尽可能的用最少的字符而又能完整的表达标识符的含义,便于自己或者团队容易记、理解、使用。2.3 英文缩写原则v 较短的单词可通过去掉“元音”形成缩写v 较长的单词可取单词的头几个字母形成缩写v 此外还有一些约定成俗的英文单词缩写。下面为常见的英文单词缩写:名称缩写icon ic(主要用在app的图标)color cl(主要用于颜色值)dividerdi(主要用于分隔线,不仅包括Listview中的divider,还包括普通布局中的线)selectorsl(主要用于某一view多种状态,不仅包括Listview中的selector,还包括按钮的selector)averageavgbackgroundBg(主要用于布局和子布局的背景)bufferbufcontrolctrldeletedeldocumentdocerrorerrescapeescincrementincinfomationinfoinitialinitimageimgInternationalizationI18Nlengthlenlibrarylibmessagemsgpassword-pwdpositionposserversrvstringstrtemptmpwindowwnd(win)2.4 单词缩写原则不要用缩写,除非该缩写是约定俗成的。3 命名规范3.1 包(packages)采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名为xx(采用公司顶级域名),三级包名根据应用进行命名,四级包名为模块名或层级名。包名此包中包含com.xx.应用名称缩写.activities页面用到的Activity类(activities层级名用户界面层)com.xx.应用名称缩写.base页面中每个Activity类共享的可以写成一个BaseActivity类(基础共享的类)com.xx.应用名称缩写.adapter 页面用到的Adapter类(适配器的类)com.xx.应用名称缩写.tools此包中包含:公共工具方法类(tools模块名)com.xx.应用名称缩写.bean(或则com.xx.应用名称缩写.unity)此包中包含:元素类com.xx.应用名称缩写.db数据库操作类com.xx.应用名称缩写.view(或则com.xx.应用名称缩写.ui)自定义的View类等com.xx.应用名称缩写.service Service服务com.xx.应用名称缩写.broadcast Broadcast服务3.2 类(classes)类名是个一名词,必须使用驼峰规则,即首字母必须大写,如果为词组,则每个单词的首字母也必须要大写,类名必须使用名词,或名词词组。要求类名简单,不允许出现无意义的单词(如 class XXXActivity)。尽量使你的类名简洁而富于描述。使用完整单词,尽量避免缩写,除非该缩写词被更广泛使用,像 URL,HTML,如果类名称中包含单词缩写,则单词缩写的每个字母均应大写。类描述例如activity类Aty或者Activity为后缀标识欢迎页面类WelcomeAty.或者WelcomeActivityAdapter类Adp或者Adapte为后缀标识新闻详情适配器NewtDetailAdp或则直接 NewDetailAdapter解析类Hlr为后缀标识首页解析类HomePosterHlr公共方法类Tools或Manager为后缀标识线程池管理类:ThreadPoolManager日志工具类:LogTools数据库类以DBHelper后缀标识新闻数据库:NewDBHelperService类以Service为后缀标识时间服务TimeServiceBroadcastReceive类以Broadcast为后缀标识时间通知TimeBroadcastContentProvider以Provider为后缀标识直接写的共享基础类以Base开头BaseActivity,BaseFragment3.3 接口(interface)命名规则与类一样采用大驼峰命名法,一般要使用able、ible、er 等后缀,如interface Runna ble ;interface Accessible 。3.4 方法(methods)方法名是一个动词,采用小驼峰命名法,即大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。例如: public void run(); public String getBookName();类中常用方法的命名:1. 类的获取方法(一般具有返回值)一般要求在被访问的字段名前加上get,如getFirstName(),getLastName()。一般来说,get前缀方法返回的是单个值,find前缀的方法返回的是列表值。2. 类的设置方法(一般返回类型为void):被访问字段名的前面加上前缀 set,如setFirstName(),setLastName().3. 类的布尔型的判断方法一般要求方法名使用单词 is或has 做前缀,如isPersistent(),isString()。或者使用具有逻辑意义的单词,例如equal 或equals。4. 类的普通方法一般采用完整的英文描述说明成员方法功能,第一个单词尽可能采用动词,首字母小写,如openFile(),addCount()。5. 构造方法应该用递增的方式写。(参数多的写在后面)。6. toString()方法:一般情况下,每个类都应该定义toString()。方法说明initXX()初始化相关方法,使用init为前缀标识,如初始化布局initView()isXX()checkXX()方法返回值为boolean型的请使用is或check为前缀标识getXX()返回某个值的方法,使用get为前缀标识setXX()设置某个值的方法,使用set为前缀标识processXX()对数据进行处理的方法,尽量使用process为前缀标识displayXX()弹出提示框和提示信息,使用display为前缀标识saveXX()与保存数据相关的,使用save为前缀标识resetXX()对数据重组的,使用reset前缀标识clearXX()清除数据相关的removeXXX()清除数据相关的drawXXX()绘制数据或效果相关的,使用draw前缀标识3.5 变量(variables)采用小驼峰命名法,即大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。变量名尽可能的使用名词或名词词组,要求简单易懂,应简短且富于描述,不允许出现无意义的单词(变量名不应以下划线或美元符号开头,尽管这在语法上是允许的)。变量名的选用应该易于记忆,即,能够指出其用途。尽量避免单个字符的变量名,除非是一次性的临时变量。临时变量通常被取名为 i,j,k,m 和 n,它们一般用于整型;c,d,e,它们一般用于字符型。如:String bookName; 正确如:String bookNameString; 错误!用统一的量词通过在结尾处放置一个量词,就可创建更加统一的变量,它们更容易理解,也更容易搜索。例如,请使用strCustomerFirst和strCustomerLast,而不要使用strFirstCustomer和strLastCustomer。量词列表:量词后缀说明First 一组变量中的第一个Last 一组变量中的最后一个Next 一组变量中的下一个变量Prev 一组变量中的上一个Cur 一组变量中的当前变量3.6 常量(Constants)命名规则:全部大写,采用下划线命名法,单词间用下划线隔开。例如:static final int MIN_WIDTH = 4; 例如:static final int MAX_WIDTH = 999; 例如:static final int GET_THE_CPU = 1;3.7 资源文件(图片drawable文件夹下)全部小写,采用下划线命名法,单词间以下划线分割,并且尽可能的使用名词或名词组,加前缀区分。命名模式:activity名称_逻辑名称/common_逻辑名称如果为公共资源,如分割线等,则直接用用途来命名如:menu_icon_navigate.png 如:某分割线:line.png 或 separator.png如果有多种形态如按钮等除外如btn_xx.xml(selector)名称功能btn_xx按钮图片使用btn_整体效果(selector)btn_xx_normal按钮图片使用btn_正常情况效果btn_xx_press按钮图片使用btn_点击时候效果bg_head背景图片使用bg_功能_说明def_search_cell默认图片使用def_功能_说明icon_more_help图标图片使用icon_功能_说明seg_list_line具有分隔特征的图片使用seg_功能_说明sel_ok选择图标使用sel_功能_说明命名后缀:后缀说明unit在使用xml的tilemode来配图片时,element图片使用此后缀nor图片的状态,代表普通状态hl图片的状态,代表高亮状态press图片的状态,代表按下状态select图片的状态,代表其所占的view被选中unselect图片的状态,代表其所占的view没有被选中 3.8 资源布局文件(XML文件(layout布局文件)全部小写,采用下划线命名法。并且使用名词或名词词组,即使用 模块名_功能名称 来命名。1) contentview命名, Activity默认布局,以去掉后缀的Activity类进行命名。不加后缀:功能模块.xm例如:main.xml、more.xml、settings.xml或则:activity_功能模块.xml 例如:activity_main.xml、activity_more.xml、fragment_more.xml2) Dialog命名:dialog_描述.xml例如:dlg_hint.xml3) PopupWindow命名:ppw_描述.xml例如:ppw _info.xml4) 列表项命名listitem_描述.xml例如:listitem_city.xml5) 包含项:include_模块.xml例如:include_head.xml、include_bottom.xml6) adapter的子布局:功能模块_item.xml例如:main_item.xml;3.9 动画文件(anim文件夹下)全部小写,采用下划线命名法,加前缀区分。/前面为动画的类型,后面为方向动画命名例子规范写法备注fade_in淡入fade_out淡出push_down_in从下方推入push_down_out从下方推出push_left推像左方slide_in_from_top从头部滑动进入zoom_enter变形进入slide_in滑动进入shrink_to_middle中间缩小3.10 资源ID(resourcesid)大小写规范与方法名一致,采用小驼峰命名法。命名规范为“资源控件的缩写名”+“变量名”。注意:页面控件名称应该和控件id名保持一致strings.xml等中的id命名:命名模式:activity名称_功能模块名称_逻辑名称/activity名称_逻辑名称/common_逻辑名称strings.xml中,使用activity名称注释,将文件内容区分开来。3.11 layout中的id命名layout 中所使用的id必须以全部单词小写,单词间以下划线分割,并且使用名词或名词词组,并且要求能够通过id直接理解当前组件要实现的功能。命名模式为:view缩写_模块名称_view的逻辑名称。如:某TextView +id/textbookname 错误 应为 +id/tv_book_name如:某EditText +id/textbookname 错误 应为 +id/edtTxt_book_nameview的缩写详情如下:控件缩写LinearLayoutllRelativeLayoutrlTableLayouttlFrameLayoutflAbsoluteLayoualLayoutViewlvRelativeViewrvTextViewtvButtonbtnImageButtonimgBtnImageViewimgVi 或则 ivCheckBoxchkRadioButtonrdoBtnanalogClockanaClkDigtalClock dgtClkDatePicker dtPkEditTextedtTxtTimePickertmPktoggleButton tglBtnProgressBarproBarSeekBarskBarAutoCompleteTextViewautoTxtZoomControls zmCtlVideoViewvdoViWdbViewwebViRantingBarratBarTab tabSpinnerspnChronometercmtScollViewsclViTextSwitchtxtSwtImageSwitchimgSwtlistViewlVi 或则lvExpandableListepdLtMapViewmapVi3.12 activity中的view变量命名类中控件名称必须与xml布局id保持一致。建议局部变量命名、静态成员变量命名只包含字母。建议:如果layout文件很复杂,建议将layout分成多个模块,每个模块定义一个moduleViewHolder,其成员变量包含所属viewStyles.xml将layout中不断重现的style提炼出通用的style通用组件,放到styles.xml中;使用layer-list和selector4 注释Java 程序有两类注释:实现注释(implementation comments)和文档注释(document comments)。实现注释是使用/*.*/和/界定的注释。文档注释(被称为doc comments)由/*.*/界定。文档注释可以通过javadoc 工具转换成HTML 文件。4.1 文件注释所有的源文件都应该在开头有一个注释,其中列出类名、版本信息、日期和版权声明。如下: /* * 文件名 * 包含类名列表 * 版本信息,版本号 * 创建日期 * 版权声明 */4.2 类注释每一个类都要包含如下格式的注释,以说明当前类的功能等。/* * 类名 * author 作者 *实现的主要功能。 *创建日期 */4.3 方法注释每一个方法都要包含 如下格式的注释 包括当前方法的用途,当前方法参数的含义,当前方法返回值的内容和抛出异常的列表。/* * 方法的一句话概述* 方法详述(简单方法可不必详述)* param s 说明参数含义* return 说明返回值含义* throws IOException 说明发生此异常的条件* throws NullPointerException 说明发生此异常的条件*/4.4 类成员变量和常量注释成员变量和常量需要使用java doc形式的注释,以说明当前变量或常量的含义/* * XXXX含义 */4.5 其他注释方法内部的注释 如果需要多行 使用/* */形式,如果为单行是用/形式的注释。不要再方法内部使用 java doc 形式的注释“/*/”,简单的区分方法是,java doc形式的注释在 eclipse中为蓝色,普通注释为绿色。4.6 XML注释规约:如果当前layout 或资源需要被多处调用,或为公共使用的layout(若list_item),则需要在xml写明注释。要求注释清晰易懂。5 代码风格5.1 缩进规约:不允许使用Tab进行缩进,使用空格进行缩进,推荐缩进为2空格。5.2 空行空行将逻辑相关的代码段分隔开,以提高可读性。 下列情况应该总是使用空行: v 一个源文件的两个片段(section)之间v 类声明和接口声明之间v 两个方法之间v 方法内的局部变量和方法的第一条语句之间v 一个方法内的两个逻辑段之间,用以提高可读性 规约:通常在 变量声明区域之后要用空行分隔,常量声明区域之后要有空行 分隔,方法声明之前要有空行分隔。5.3 行宽无特别规定。6 规约6.1 方法v 一个方法尽量不要超过30行,如果方法太长,说明当前方法业务逻辑已经非常复杂,那么就需要进行方法拆分,保证每个方法只作一件事。v 不要使用 try catch 处理业务逻辑!6.2 参数和返回值v 一个方法的参数尽可能的不要超过4个!v 如果一个方法返回的是一个错误码,请使用异常!v 尽可能不要使用null, 替代为异常 或者使用空变量 如返回 List 则可以使用Collections.emptyList()6.3 神秘的数代码中不允许出现单独的数字,字符!如果需要使用数字或字符,则将它们按照含义封装为静态常量!(for语句中除外)6.4 控制语句判断中如有常量,则应将常量置于判断式的右侧。如:if ( true = isAdmin().尽量不使用三目条件的嵌套。所有if 语句必须用包括起来,即便是只有一句:if (true)/do something.if (true)i = 0; /不要使用这种对于循环:/不推荐方式_while(index products.getCount()/每此都会执行一次getCount()方法,/若此方法耗时则会影响执行效率/而且可能带来同步问题,若有同步需求,请使用同步块或同步方法/推荐方式_/将操作结构保存在临时变量里,减少方法调用次数final int count = products.getCount();while(index = 0) ? x : -x8 21种代码的坏味道应该在编程中尽量避免这21种“坏味道”。8.1 Duplicated Code代码重复几乎是最常见的异味了。他也是Refactoring 的主要目标之一。代码重复往往来自于copy-and-paste 的编程风格。8.2 Long method它是传统结构化的“遗毒“。一个方法应当具有自我独立的意图,不要把几个意图放在一起。8.3 Large Class大类就是你把太多的责任交给了一个类。这里的规则是One Class One Responsibility。8.4 Divergent Change一个类里面的内容变化率不同。某些状态一个小时变一次,某些则几个月一年才变一次;某些状态因为这方面的原因发生变化,而另一些则因为其他方面的原因变一次。面向对象的抽象就是把相对不变的和相对变化相隔离。把问题变化的一方面和另一方面相隔离。这使得这些相对不变的可以重用。问题变化的每个方面都可以单独重用。这种相异变化的共存使得重用非常困难。8.5 Shotgun Surgery这正好和上面相反。对系统一个地方的改变涉及到其他许多地方的相关改变。这些变化率和变化内容相似的状态和行为通常应当放在同一个类中。8.6 Feature Envy对象的目的就是封装状态以及与这些状态紧密相关的行为。如果一个类的方法频繁用get 方法存取其他类的状态进行计算,那么你要考虑把行为移到涉及状态数目最多的那个类。8.7 Data Clumps某些数据通常像孩子一样成群玩耍:一起出现在很多类的成员变量中,一起出现在许多方法的参数中.,这些数据或许应该自己独立形成对象。8.8 Primitive Obsession面向对象的新手通常习惯使用几个原始类型的数据来表示一个概念。譬如对于范围,他们会使用两个数字。对于Money,他们会用一个浮点数来表示。因为你没有使用对象来表达问题中存在的概念,这使得代码变的难以理解,解决问题的难度大大增加。好的习惯是扩充语言所能提供原始类型,用小对象来表示范围、金额、转化率、邮政编码等等。8.9 Switch Statement基于常量的开关语句是OO 的大敌,你应当把他变为子类、state 或strategy。8.10 Parallel Inheritance Hierarchies并行的继承层次是shotgun surgery 的特殊情况。因为当你改变一个层次中的某一个类时,你必须同时改变另外一个层次的并行子类。8.11 Lazy Class一个干活不多的类。类的维护需要额外的开销,如果一个类承担了太少的责任,应当消除它。8.12 Speculative Generality一个类实现了从未用到的功能和通用性。通常这样的类或方法唯一的用户是testcase。不要犹豫,删除它。8.13 Temporary Field一个对象的属性可能只在某些情况下才有意义。这样的代码将难以理解。专门建立一个对象来持有这样的孤儿属性,把只和他相关的行为移到该类。最常见的是一个特定的算法需要某些只有该算法才有用的变量。8.14 Message Chain消息链发生于当一个客户向一个对象要求另一个对象,然后客户又向这另一对象要求另一个对象,再向这另一个对象要求另一个对象,如此如此。这时,你需要隐藏分派。8.15 Middle Man对象的基本特性之一就是封装,而你经常会通过分派去实现封装。但是这一步不能走得太远,如果你发现一个类接口的一大半方法都在做分派,你可能需要移去这个中间人。8.16 Inappropriate Intimacy某些类相互之间太亲密,它们花费了太多的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026外研版高考英语复习讲义 必修第二册 Unit 1 Food for thought
- 2026上海春季高考物理考试总复习:圆周运动的应用(知识梳理+考点讲义)原卷版
- 2026外研版高考英语复习讲义 选择性必修第一册 Unit 2 Onwards and upwards
- 医学肾病综合征合并血栓案例分析课件
- 2026年高考数学复习:球的切接问题
- 2026年高考语文备考古诗鉴赏之山水田园诗专项指导
- 《JBT 6189.5-199216mm 槽系组合夹具压紧件 弯头压板》(2026年)实施指南
- 《JBT 6060.9-1992 机械压力机锻模 整体导套》(2026年)实施指南
- 中药饮片购销员岗前内部考核试卷含答案
- 《JBT 5992.9-1992 机械制造工艺方法分类与代码 装配与包装》(2026年)实施指南
- 殡仪馆消防安全教育培训
- 高校药学课程教学质量评价报告
- 2025年建筑防火设计试题及答案
- 【英语】被动语态熊出没版(课件)
- 2025年及未来5年中国造纸原料市场调查研究及行业投资潜力预测报告
- 2025云南玉溪红塔实业有限责任公司员工招聘25人笔试历年难易错考点试卷带答案解析2套试卷
- 江西交通职业技术学院单招试卷
- 建设工程施工现场消防安全专项检查方案
- 2025年退役军人服务中心章程
- 郑州水务笔试题目及答案
- 人工智能专业知识培训课件
评论
0/150
提交评论