安卓开发规范,编制程序命名规范

By admin in 4858.com on 2019年4月10日

  王小明,他的长辈肯定有姓王的,彭河村城关不就有家王姓人家啊,恐怕正是那家的娃子,3个走丢的小朋友就成功的归家了。

  王小明,他的长辈肯定有姓王的,彭河村杨林不就有家王姓人家啊,大概就是那家的毛孩先生子,三个走丢的毛孩(Xu)子就大功告成的回村了。

C#编制程序命名规范,

  王小明,他的前辈肯定有姓王的,彭河村云溪乡不就有家王姓人家啊,大概就是那家的娃子,1个走丢的娃子就成功的回村了。

  命名规范就就像是给人起名相同,从名字中传达出一部分音信,比如效用域、类型,能够起到见名知义的职能,在付出的时候,有个漂亮的命名规范能够晋级广大的费用功效。尤其是团组织开发的时候,每一种人的命名规范分裂,在调用或保卫安全的时候,还要花时间来揣摩笔者创制类或字段的意向。

  • 命名空间:使用格式<Company>.<Compinent>,如,Weimei.Study,这样规范重大是为着在引用了第2方库的时候幸免命名空间重名,造成编码是的歪曲;
  • 类、接口、方法及性能:使用Pascal命名规则,如,GetDescript;
  • 变量:使用Camel命名规则,如,personCount;
  • 常量:全体大写,单词之间用下划线“_”隔开,如,GROW_UP_AGE。

    namespace Weimei.Study
    {
    
      class Person 
        {
            public const int GROW_UP_AGE = 18;
            private string _name;
            public string Name;
            { 
                 get{ return _name;}
                 set{ _name = value;}
            }
            public int Age { get; set; }
        }
    
        interface IPersonService
        {
            string GetDescript();
        }
    }
    

     

 

  使用前缀或后缀作为标识,区分区别的法力或项目:

  • 接口:使用假名”I“作为前缀;
  • 静态变量:使用“s_”作为前缀;
  • 实体变量:使用“m_”作为前缀;
  • 分子变量:使用“_”作为前缀。

    namespace Weimei.Study
    {
        class Program
        {
            static void Main(string[] args)
            {
                Person m_person = new Person();
                m_person.Name = "王小明";
                m_person.Age = 12;
                IPersonService m_ps = new PersonService(m_person);
                string result = m_ps.GetDescript();
    
                Console.WriteLine(result);
                Console.ReadLine();
            }
        }
    
        class Person
        {
            public const int GROW_UP_AGE = 18;//成年年龄
            private string _name;
            public string Name
            { 
                 get{ return _name;}
                 set{ _name = value;}
            }
            public int Age { get; set; }
        }
    
        interface IPersonService
        {
            string GetDescript();
        }
    
        class PersonService : IPersonService
        {
            Person _m_person;
    
            public PersonService(Person m_person) 
            {
                _m_person = m_person;
            }
            public string GetDescript()
            {
                string desc = "未成年";
                if (_m_person.Age >= Person.GROW_UP_AGE) 
                {
                    desc = "已成年";
                }
    
                return _m_person.Name + desc;
            }
        }
    }
    

     注意事项:

  • 在起名字时,不要轻易起,比如变量int
    a,其余人要理解这些变量是怎么用的还要看下边的代码。假设变量使用来计数的,则应起名称为xxCount;

  • 创造类时不要与内置类名相同,防止混淆;
  • 适中使用前缀和后缀,反之会弄巧成拙。

 

王小明,他的前辈肯定有姓王的,彭河村四都镇不就有家王姓人家啊,只怕正是那家的儿童,贰个走丢的儿童就成功的归家…

安卓开发规范(updating)

  命名规范就好像同给人起名相同,从名字中传达出有些新闻,比如功能域、类型,能够起到见名知义的功用,在开发的时候,有个精美的命名规范能够晋级广大的开支效能。更加是团组织开发的时候,每种人的命名规范不相同,在调用或爱惜的时候,还要花时间来衡量笔者创造类或字段的企图。

  命名规范就就像是给人起名相同,从名字中传言出壹些消息,比如成效域、类型,能够起到见名知义的效劳,在开发的时候,有个精美的命名规范能够提高广大的支付效用。尤其是团体开发的时候,每种人的命名规范分裂,在调用或爱戴的时候,还要花时间来斟酌笔者创立类或字段的意向。

摘要

  • 1
    前言
  • 2
    AS规范
  • 三命名规范
  • 四财富文件规范
  • 伍版本统壹规范
  • 陆第2方库规范
  • 7注释规范
  • 8测试规范
  • 9
    RN规范
  • 十其余的局地正经
  • 命名空间:使用格式<Company>.<Compinent>,如,Weimei.Study,那样规范重大是为着在引用了第三方库的时候防止命名空间重名,造成编码是的歪曲;
  • 类、接口、方法及品质:使用帕斯Carl命名规则,如,GetDescript;
  • 变量:使用Camel命名规则,如,personCount;
  • 常量:全体大写,单词之间用下划线“_”隔开,如,GROW_UP_AGE。

    namespace Weimei.Study
    {
    
      class Person 
        {
            public const int GROW_UP_AGE = 18;
            private string _name;
            public string Name;
            { 
                 get{ return _name;}
                 set{ _name = value;}
            }
            public int Age { get; set; }
        }
    
        interface IPersonService
        {
            string GetDescript();
        }
    }
    

     

  • 命名空间:使用格式<Company>.<Compinent>,如,Weimei.Study,那样规范重大是为着在引用了第1方库的时候幸免命名空间重名,造成编码是的混淆;
  • 类、接口、方法及性能:使用Pascal命名规则,如,GetDescript;
  • 变量:使用Camel命名规则,如,personCount;
  • 常量:全体大写,单词之间用下划线“_”隔开,如,GROW_UP_AGE。

    namespace Weimei.Study
    {
    
      class Person 
        {
            public const int GROW_UP_AGE = 18;
            private string _name;
            public string Name;
            { 
                 get{ return _name;}
                 set{ _name = value;}
            }
            public int Age { get; set; }
        }
    
        interface IPersonService
        {
            string GetDescript();
        }
    }
    

     

1 前言

为了方便项目珍贵以及标准支出,促进成员之间Code
Review的功用,故提出以下开发规范,如有越来越好提议,欢迎到GitHub提issue,原来的文章地址:
安卓开发规范(updating)

安卓开发规范,编制程序命名规范。 

 

2 AS规范

工欲善其事,必先利其器。

  1. 尽量采纳最新版的IDE实行付出;
  2. 编码格式统一为UTF-8
  3. 编辑完.java,
    .xml等公事后一定要格式化(缩进对齐与AS暗中同意一致即可);
  4. 删去多余的import,收缩警告出现,可使用AS的Optimize Imports快捷键;
  5. AS常用支付插件能够参照那里~AS常用支付插件

  使用前缀或后缀作为标识,区分不相同的功力或项目:

  使用前缀或后缀作为标识,区分差异的效应或项目:

叁 命名规范

代码中的命名严禁动用拼音与英文混合的情势,更不允许直接行使中文的方法。正确的英文拼写和语法能够让阅读者易于理解,制止歧义。注意,就算纯拼音命超形式也要制止采取。但
alibaba, taobao, youku, hangzhou 等国际通用的称呼,可视同英文。

  • 接口:使用假名”I“作为前缀;
  • 静态变量:使用“s_”作为前缀;
  • 实业变量:使用“m_”作为前缀;
  • 分子变量:使用“_”作为前缀。

    namespace Weimei.Study
    {
        class Program
        {
            static void Main(string[] args)
            {
                Person m_person = new Person();
                m_person.Name = "王小明";
                m_person.Age = 12;
                IPersonService m_ps = new PersonService(m_person);
                string result = m_ps.GetDescript();
    
                Console.WriteLine(result);
                Console.ReadLine();
            }
        }
    
        class Person
        {
            public const int GROW_UP_AGE = 18;//成年年龄
            private string _name;
            public string Name
            { 
                 get{ return _name;}
                 set{ _name = value;}
            }
            public int Age { get; set; }
        }
    
        interface IPersonService
        {
            string GetDescript();
        }
    
        class PersonService : IPersonService
        {
            Person _m_person;
    
            public PersonService(Person m_person) 
            {
                _m_person = m_person;
            }
            public string GetDescript()
            {
                string desc = "未成年";
                if (_m_person.Age >= Person.GROW_UP_AGE) 
                {
                    desc = "已成年";
                }
    
                return _m_person.Name + desc;
            }
        }
    }
    

     注意事项:

  • 在起名字时,不要随便起,比如变量int
    a,别的人要了然这些变量是为啥用的还要看下边包车型地铁代码。要是变量使用来计数的,则应起名称为xxCount;

  • 创造类时决不与内置类名相同,防止混淆;
  • 适于使用前缀和后缀,反之会不志得意满。
  • 接口:使用假名”I“作为前缀;
  • 静态变量:使用“s_”作为前缀;
  • 实体变量:使用“m_”作为前缀;
  • 分子变量:使用“_”作为前缀。

    namespace Weimei.Study
    {
        class Program
        {
            static void Main(string[] args)
            {
                Person m_person = new Person();
                m_person.Name = "王小明";
                m_person.Age = 12;
                IPersonService m_ps = new PersonService(m_person);
                string result = m_ps.GetDescript();
    
                Console.WriteLine(result);
                Console.ReadLine();
            }
        }
    
        class Person
        {
            public const int GROW_UP_AGE = 18;//成年年龄
            private string _name;
            public string Name
            { 
                 get{ return _name;}
                 set{ _name = value;}
            }
            public int Age { get; set; }
        }
    
        interface IPersonService
        {
            string GetDescript();
        }
    
        class PersonService : IPersonService
        {
            Person _m_person;
    
            public PersonService(Person m_person) 
            {
                _m_person = m_person;
            }
            public string GetDescript()
            {
                string desc = "未成年";
                if (_m_person.Age >= Person.GROW_UP_AGE) 
                {
                    desc = "已成年";
                }
    
                return _m_person.Name + desc;
            }
        }
    }
    

     注意事项:

  • 在起名字时,不要轻易起,比如变量int
    a,其余人要了然那一个变量是怎么用的还要看下边包车型大巴代码。假使变量使用来计数的,则应起名称为xxCount;

  • 创造类时不要与内置类名相同,以防混淆;
  • 适中使用前缀和后缀,反之会大失所望。

3.1 包名

包名全体大写,三番五次的单词只是简单地连接起来,不使用下划线。

选择反域名命名规则,全体采纳小写字母。一级包名是一等域名,常常为com,
edu, gov, net,
org等,二级包名叫同盟社名,三级包名依照使用进行命名,四级包名字为模块名或层级名。

包名 此包中包含
com.xx.应用名称缩写.activity 用户界面中所有的Activity类
com.xx.应用名称缩写.fragment 界面中所有的Fragment类
com.xx.应用名称缩写.base 基础共享的类
com.xx.应用名称缩写.adapter 页面用到的Adapter类 (适配器的类)
com.xx.应用名称缩写.view 自定义的View类
com.xx.应用名称缩写.util 此包中包含:公共工具方法类(util模块名)
com.xx.应用名称缩写.bean 下面可分:vo、po、dto 此包中包含:JavaBean类
com.xx.应用名称缩写.model 此包中包含:模型类
com.xx.应用名称缩写.db 数据库操作类
com.xx.应用名称缩写.view (或者 com.xx.应用名称缩写.widget ) 自定义的View类等
com.xx.应用名称缩写.service Service服务
com.xx.应用名称缩写.receiver BroadcastReceiver服务
com.xx.应用名称缩写.config 所有的配置相关的类

留神:如若项目应用MVP,全数M、V、P抽取出来的接口都放置在对应模块的i包下,全体的贯彻都停放在相应模块的impl下

 

 

3.2 类名

类名都是UpperCamelCase风格编写。

类名平日是名词或名词短语,接口名称有时恐怕是形容词或形容词短语。今后还平昔不一定的条条框框或有效的预定来命名注明类型。

名词,接纳大驼峰命名法,尽量幸免缩写,除非该缩写是明显的,
比如HTML,U奥德赛L,借使类名称中隐含单词缩写,则单词缩写的各类字母均应大写。

描述 例如
Activity 类 Activity为后缀标识 欢迎页面类WelcomeActivity
Adapter类 Adapter 为后缀标识 新闻详情适配器 NewDetailAdapter
解析类 Parser为后缀标识 首页解析类HomePosterParser
工具方法类 Utils或Manager为后缀标识(与系统或第三方的Utils区分)或功能+Utils 线程池管理类:ThreadPoolManager日志工具类:LogUtils(Logger也可)打印工具类:PrinterUtils
数据库类 以DBHelper后缀标识 新闻数据库:NewDBHelper
Service类 以Service为后缀标识 时间服务TimeService
BroadcastReceiver类 以Receiver为后缀标识 推送接收JPushReceiver
ContentProvider类 以Provider为后缀标识 ShareProvider
自定义的共享基础类 以Base开头 BaseActivity,BaseFragment

测试类的命名以它要测试的类的称呼初始,以Test停止。例如:HashTest 或
HashIntegrationTest。

接口(interface):命名规则与类一样使用大驼峰命名法,多以able或ible结尾,如
interface Runnable , interface Accessible。

在意:假若项目选取MVP,全体Model、View、Presenter的接口都是I为前缀,不加后缀,其余的接口选择上述命名规则。

3.3 方法名

情势名都是lowerCamelCase风格编写。

主意名普普通通是动词或动词短语。

方法 说明
initXX() 初始化相关方法,使用init为前缀标识,如初始化布局initView()
isXX() checkXX() 方法返回值为boolean型的请使用is或check为前缀标识
getXX() 返回某个值的方法,使用get为前缀标识
setXX() 设置某个属性值
handleXX()/processXX() 对数据进行处理的方法
displayXX()/showXX() 弹出提示框和提示信息,使用display/show为前缀标识
updateXX() 更新数据
saveXX() 保存数据
resetXX() 重置数据
clearXX() 清除数据
removeXX() 移除数据或者视图等,如removeView();
drawXX() 绘制数据或效果相关的,使用draw前缀标识

3.4 常量名

常量名命超级模特式为CONSTANT_CASE,全部假名大写,用下划线分隔单词。那,到底如何算是一个常量?

每一个常量都以四个静态final字段,但不是颇具静态final字段都是常量。在支配1个字段是还是不是是1个常量时,怀想它是或不是真正感觉像是三个常量。例如,假使别的八个该实例的观看比赛状态是可变的,则它大致肯定不会是一个常量。只是永远不打算改变目标一般是不够的,它要实在一贯不变才能将它示为常量。

// Constants
static final int NUMBER = 5;
static final ImmutableListNAMES = ImmutableList.of("Ed", "Ann");
static final Joiner COMMA_JOINER = Joiner.on(','); // because Joiner is immutable
static final SomeMutableType[] EMPTY_ARRAY = {};
enum SomeEnum { ENUM_CONSTANT }

// Not constants
static String nonFinal = "non-final";
final String nonStatic = "non-static";
static final SetmutableCollection = new HashSet();
static final ImmutableSetmutableElements = ImmutableSet.of(mutable);
static final Logger logger = Logger.getLogger(MyClass.getName());
static final String[] nonEmptyArray = {"these", "can", "change"};

三.5 格外量字段名

11分量字段名以lowerCamelCase风格的根基上改造为如下风格:基本协会为scopeVariableNameType

scope:范围

非公有,非静态字段命名以m早先。

静态字段命名以s开端。

国有非静态字段命名以p开首。

国有静态字段(全局变量)命名以g开始。

例子:

public class MyClass {
      int mPackagePrivate;  
      private int mPrivate;  
      protected int mProtected;
      private static MyClass sSingleton;  
      public int pField;
      public static int gField;
}

应用壹字符前缀来表示作用范围,一个字符的前缀必须小写,前缀前边是由表意性强的三个单词或八个单词组成的名字,而且种种单词的首写字母大写,此外字母小写,这样保险了对变量名能够实行不易的标点。

Type:类型

思考到Android中采取过多UI控件,为防止控件和平时成员变量混淆以及越来越好达意,全部用来代表控件的成员变量统三星(Samsung)上控件缩写作为后缀(文末附有缩写表)。

对于1般变量1般不添加类型后缀,倘若统壹添加类型后缀,请参考文末的缩写表。

用联合的量词通过在结尾处放置三个量词,就可创立特别统一的变量,它们更易于了然,也更便于招来。

留神:假使项目中运用ButterKnife,则不添加m前缀,以lowerCamelCase风格命名。

譬如说,请使用 mCustomerStrFirst 和
mCustomerStrLast,而不用使用mFirstCustomerStr和mLastCustomerStr。

量词列表 量词后缀说明
First 一组变量中的第一个
Last 一组变量中的最后一个
Next 一组变量中的下一个变量
Prev 一组变量中的上一个
Cur 一组变量中的当前变量

说明:

集聚添加如下后缀:List、Map、Set
数组添加如下后缀:Arr

注意:全体的VO(值对象)统一选拔规范的lowerCamelCase风格编写,全数的DTO(数据传输对象)就根据接口文书档案中定义的字段名编写。

3.6 参数名

参数名以lowerCamelCase作风编写。
参数应该制止用单个字符命名。

三.七 局地变量名

有的变量名以lowerCamelCase风格编写,比起任何门类的称谓,局地变量名能够有越来越宽松的缩写。

就算缩写越来越宽松,但要么要防止用单字符实行命名,除了权且变量和循环变量。

尽管一些变量是final和不足更改的,也不应有把它示为常量,自然也不能够用常量的规则去命名它。

三.捌 一时半刻变量

如今变量常常被取名称叫i,j,k,m和n,它们壹般用于整型;c,d,e,它们一般用于字符型。
如: for (int i = 0; i < len ; i++)。

三.九 类型变量名

项目变量可用以下三种风格之一举办命名:

单个的大写字母,后边能够跟2个数字(如:E, T, X, T二)。

以类命名方式(参考3.2
类名4858.com,),前面加个大写的T(如:RequestT,
FooBarT)。

更加多还可参考~AlibabaJava开发手册

四 财富文件规范

四.1 财富布局文件(XML文件(layout布局文件))

一切大写,选择下划线命名法

4.1.1 contentView 命名

总得以全体单词小写,单词间以下划线分割,使用名词或名词词组。

拥有Activity或Fragment的contentView必须与其类名对应,对应规则为:

将富有字母都转为小写,将项目和作用调换(也正是后缀变前缀)。

例如:activity_main.xml

4.1.2 Dialog命名:dialog_描述.xml

例如:dialog_hint.xml

4.1.3 PopupWindow命名:ppw_描述.xml

例如:ppw_info.xml

4.1.四 列表项命名:item_描述.xml

例如:item_city.xml

四.一.五 包罗项命名:模块_(位置)描述.xml

例如:activity_main_head.xmlactivity_main_bottom.xml

在意:通用的带有项命名选取:项目名称缩写_描述.xml

例如:xxxx_title.xml

四.二 能源文件(图片drawable文件夹下)

整整大写,选取下划线命名法,加前缀区分

取有名的模特式:可加后缀 _small 表示小图, _big
表示大图,逻辑名称可由四个单词加下划线组成,选用以下规则:

用途_模块名_逻辑名称
用途_模块名_颜色
用途_逻辑名称
用途_颜色

证实:用途也指控件类型(具体见UI控件缩写表)

例如:

btn_main_home.png 按键

divider_maket_white.png 分割线

ic_edit.png 图标

bg_main.png 背景

btn_red.png 中绿按键

btn_red_big.png 石绿大按键

ic_head_small.png 小头像

bg_input.png 输入框背景

divider_white.png 浅蓝分割线

只要有各类造型如按钮等除了如 btn_xx.xml(selector)

名称 功能
btn_xx 按钮图片使用btn_整体效果(selector)
btn_xx_normal 按钮图片使用btn_正常情况效果
btn_xx_pressed 按钮图片使用btn_点击时候效果
btn_xx_focused state_focused聚焦效果
btn_xx_disabled state_enabled (false)不可用效果
btn_xx_checked state_checked选中效果
btn_xx_selected state_selected选中效果
btn_xx_hovered state_hovered悬停效果
btn_xx_checkable state_checkable可选效果
btn_xx_activated state_activated激活的
btn_xx_windowfocused state_window_focused
bg_head 背景图片使用bg_功能_说明
def_search_cell 默认图片使用def_功能_说明
ic_more_help 图标图片使用ic_功能_说明
seg_list_line 具有分隔特征的图片使用seg_功能_说明
sel_ok 选择图标使用sel_功能_说明

留神:使用AndroidStudio的插件SelectorChapek能够快速生成selector,前提是命名要规范。

四.3 动画文件(anim文件夹下)

凡事大写,选取下划线命名法,加前缀区分。

切实动画选择以下规则:

模块名_逻辑名称

逻辑名称

refresh_progress.xml
market_cart_add.xml
market_cart_remove.xml

普通的tween动画接纳如下表格中的命超级模特式

// 前边为动画片的种类,后边为方向

动画命名例子 规范写法
fade_in 淡入
fade_out 淡出
push_down_in 从下方推入
push_down_out 从下方推出
push_left 推向左方
slide_in_from_top 从头部滑动进入
zoom_enter 变形进入
slide_in 滑动进入
shrink_to_middle 中间缩小

4.4 values中name命名

4.4.1 colors.xml

colors的name命名使用下划线命名法,在你的colors.xml文本中应该只是映射颜色的称呼四个ACRUISERGB值,而未有别的的。不要采纳它为分歧的按钮来定义APAJEROGB值。

无须这么做

       #FFFFFF

       #2A91BD

       #5F5F5F

       #939393

       #FFFFFF

       #FF9D2F
       ... 

       #323232

使用那种格式,你会相当不难的启幕重复定义A牧马人GB值,那使如若要求改变基本色变的很复杂。同时,这么些概念是跟1些条件事关起来的,如button或者comment,
应该松开3个按钮风格中,而不是在color.xml文件中。

相反,这样做

       #FFFFFF

       #DBDBDB

       #939393

       #5F5F5F

       #323232

       #27D34D

       #2A91BD

       #FF9D2F

       #FF432F

向利用设计者那里要那一个调色板,名称不须求跟”green”, “blue”, 等等壹样。
“brand_primary”, “brand_secondary”, “brand_negative”
那样的名字也是一点一滴能够承受的。
像这样规范的颜色很不难修改或重构,会使利用一共动用了不怎么种不一致的水彩变得不行清晰。
平日2个富有审美价值的UI来说,收缩使用颜色的档次是不行重大的。

4.4.2 dimens.xml

像对待colors.xml一样对待dimens.xml文件
与概念颜色调色板1样,你还要也应有定义三个空当间隔和字体大小的“调色板”。
一个好的事例,如下所示:

       22sp

       18sp

       15sp

       12sp

       40dp

       24dp

       14dp

       10dp

       4dp

       60dp

       40dp

       32dp

布局时在写 margins 和 paddings
时,你应当利用spacing_xxxx尺寸格式来布局,而不是像对待String字符串一样一贯写值。
那样写会那多少个有感觉,会使组织和更改作风或布局是格外不难。

4.4.3 strings.xml

strings的name命名使用下划线命名法,选用以下规则:模块名+逻辑名称

例如:

main_menu_about 主菜单按键文字
friend_title 好友模块标题栏
friend_dialog_del 好友删除提示
login_check_email 登录验证
dialog_title 弹出框题目
button_ok 确认键
loading 加载文字

4.4.4 styles.xml

大约各种种类都须求适当的应用style文件,因为对此3个视图来说有2个双重的外观是很常见的,将具有的外观细节属性(colors,
padding, font)放在style文件中。
在运用中对于多数文本内容,最起码你应有有一个通用的style文件,例如:

应用到TextView 中:

您也许需求为按钮控件做同样的业务,不要结束在这边。将1组有关的和再一次android:****的习性放到叁个通用的style中。

将1个大的style文件分割成八个公文, 你能够有多少个styles.xml
文件。Android
SDK援助任何文件,styles本条文件名称并未坚守,起效用的是在文书
里xml的

正文原来的小说者“Blankj”,通过维护合法权益骑士授权品牌馆授权转发。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有