代码可读性艺术在Andorid中的体现
- 前言
最近接手的一些项目,不同的人编码风格迥异,类里的变量、方法的定义穿插,注释极为稀少,更有一些变量和方法的命名非常近似,例如表示播放队列的"playQueue"和表示歌单的"playList",wtf?
这不是一个意思吗?一些回调的时机也不能直观的看出来,通常需要debug调试多次;multi project之间值的传递、广播跨进程的发送、服务的开启和绑定,一句注释都没有,不知道过了这么久,
这些代码的同事,还能很快看懂自己写的东西吗?这简直让人抓狂啊,于是乎,写下此篇博客,吐槽别人的同时,更要引以为鉴,通过一些实际而有效的方法让自己代码更具可读性.
- 代码中行而有效的几点
- 放置常量与变量的排位顺序
- 第一层放置顺序的规则:
常量->变量->接口->内部类. - 第二层,各个类型内部又区分为:
静态static->非静态 - 第三层,最后的一个排位规则:访问权限
private私有->包访问(前无修饰符)->protected->public
- 第一层放置顺序的规则:
依据这个规则,总结如下: 类中定义变量的先后顺序
private static final int->String 私有常量String型
static final int->String 包与protected常访问权限常量
public static final int->String公共常量
private static int->String 私有静态变量
static int->String 包与protected常访问权限静态变量
public static int->String公共静态变量
private int->Stirng;普通私有变量
protect子类访问权限->public int&String 普通公共变量
接口:private static ->普通接口
内部类:private static ->普通内部类
2.常量&变量命令规则
- 以**static fina**l修饰的常量字母全都为大写,单词之间用_下划线隔开,如RESULT_CANCELED。
- 静态变量前用小写字母”s”表示,后接单词的首字母大写,如sActivity
- 除静态变量的其它所有变量前都用小写字母”m”表示,后接单词的首字母大写,如 private Window mWindow
- 一般都是用类名前加”s”或者”m”来命名一个类对象变量
3.方法命名规则
- 采用小驼峰命名法,首单词小写,第二个单词首字母大写,如getActivityToken()
- 方法名的第一个字母一般都为动词
- 常用的get,set来表示取得与设置;save保存
- on用以当什么发生的时候,生命周期都是以on开头;
- requse**t请求,如请求权限;**add添加;enter进入
- open开启对话框之类;close关闭;cancle取消;show显示,dismiss隐藏
- start启动如activity;stop停止如stop service;init初始化
- 如果方法的返回值为boolean,一般命令为isMn()或者hasMn()
- 其它boolean值的返回动词有should,can
4.MultiProject中注明跳转到哪里
一般地,Andorid中界面的跳转、广播的发送、服务的开始和绑定,都是与Intent意图相关;Intent又分为显示意图和隐式意图,显示意图需显示的设置好当前类要跳转到哪个包名下的那个类(这种跳转通常都不是
跨进程的),而一些进程间的跳转,系统服务的开启都是需要隐式跳转的,隐式跳转是根据要跳转类中定义的action和跳转到组件的action(清单文件中定义的节点信息)是否一致;通常你并不知道需要跳转到哪里;
因此,有两点是需要注意的:①action尽量定义得与跳转目标类相关,且是唯一的②要求加上明确的注释信息,跳转到的包名、类名、用途
5.代码中一些暂时的解决办法需注明TODO注释
IDE工具一般对TODO注释功能有很好的支持,可以显示和定位所有注释中出现的TODO关键字;往往一些不靠谱的解决办法或途径都是导致某个bug的隐藏因素;提前注明此为临时的解决办法,可能导致什么后果,计划后面什么时候再修,可以给后期维护和调试带来很大的便利,这一点其实及其重要,因此决定单独拿出来写一下
- 小结
暂时想到的就是这些了,后面遇到更坑,更让我头疼的代码,再来补充...附上找到的 常见控件缩写和常用英文单词的缩写规范表
附录:
表1 UI控件缩写表
控件 | 缩写 | 例子 |
---|---|---|
LinearLayout | ll | llFriend或者mFriendLL |
RelativeLayout | rl | rlMessage或mMessageRL |
FrameLayout | fl | flCart或mCartFL |
TableLayout | tl | tlTab或mTabTL |
Button | btn | btnHome或mHomeBtn |
ImageButton | ibtn | btnPlay或mPlayIBtn |
TextView | tv | tvName或mNameTV |
EditText | et | etName或mNameET |
ListView | lv | lvCart或mCartLV |
ImageView | iv | ivHead或mHeadIV |
GridView | gv | gvPhoto或mPhotoGV |
表2 常见的英文单词缩写:
名称 | 缩写 |
---|---|
icon | ic (主要用在app的图标) |
color | cl(主要用于颜色值) |
divider | di(主要用于分隔线,不仅包括Listview中的divider,还包括普通布局中的线) |
selector | sl(主要用于某一view多种状态,不仅包括Listview中的selector,还包括按钮的selector) |
average | avg |
background | bg(主要用于布局和子布局的背景) |
buffer | buf |
control | ctrl |
delete | del |
document | doc |
error | err |
escape | esc |
increment | inc |
infomation | info |
initial | init |
image | img |
Internationalization | I18N |
length | len |
library | lib |
message | msg |
password | pwd |
position | pos |
server | srv |
string | str |
temp | tmp |
window | wnd(win) |
注:程序中使用单词缩写原则:不要用缩写,除非该缩写是约定俗成的。
代码可读性艺术在Andorid中的体现的更多相关文章
- 《修改代码的艺术》【PDF】下载
<修改代码的艺术>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382309 内容简介 <修改代码的艺术>针对大型的. ...
- ENode 1.0 - 事件驱动架构(EDA)思想的在框架中如何体现
开源地址:https://github.com/tangxuehua/enode 上一篇文章,我给大家分享了我的一个基于DDD以及EDA架构的框架enode,但是只是介绍了一个大概.接下来我准备用很多 ...
- enode框架step by step之事件驱动架构(EDA)思想的在框架中如何体现
enode框架step by step之事件驱动架构(EDA)思想的在框架中如何体现 上一篇文章,我给大家分享了我的一个基于DDD以及EDA架构的框架enode,但是只是介绍了一个大概.接下来我准备用 ...
- 适配器在JavaScript中的体现
适配器设计模式在JavaScript中非常有用,在处理跨浏览器兼容问题.整合多个第三方SDK的调用,都可以看到它的身影. 其实在日常开发中,很多时候会不经意间写出符合某种设计模式的代码,毕竟设计模式就 ...
- 读书报告之《改动代码的艺术》 (I)
<改动代码的艺术>,英文名<Working Effectively with Legacy Code>,中文翻译的文笔上绝对谈不上"艺术"二字.愧对艺术二字 ...
- Scala 深入浅出实战经典 第51讲:Scala中链式调用风格的实现代码实战及其在Spark中应用
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala 深入浅出实战经典 第48讲:Scala类型约束代码实战及其在Spark中的应用源码解析
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala 深入浅出实战经典 第47讲:Scala多重界定代码实战及其在Spark中的应用
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- 代理模式及其在spring与struts2中的体现
代理模式 代理模式有三个角色组成: 1.抽象主题角色:声明了真实主题和代理主题的共同接口. 2.代理主题角色:内部包含对真实主题的引用,并且提供和真实主题角色相同的接口. 3.真实主题角色:定义真实的 ...
随机推荐
- Qt之HTTP上传/下载
简述 在前面章节中我们讲述了关于Qt显示网络图片的内容,比较简单,因为图片一般都比较小,下载到本地速度比较快,所以基本不需要什么特殊处理,本节我们主要针对HTTP实现上传/下载进行详细的讲解与分享,包 ...
- JavaScript高级---桥模式设计
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- Maybe I go too extreme
昨天拖着一个没睡好的身体去面试了2家公司 被问到Collection的子集的时候顿时傻了一会,明明很简单的问题一时就想不起来了,哈哈.果然做it的人身体要顾好,状态太差了. 发现了一个问题,其实也是早 ...
- [Leetcode] DP -- Target Sum
You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symb ...
- 复制命令(COPY)
COPY 命令: // 描述: 将一个或多个文件从一个位置复制到另一个位置. ### 注意:如果想复制文件夹,请使用 XCOPY . // 语法: copy [/a] [/b] [/d] [/v] ...
- [CF850F] Rainbow Balls
题目大意 这里 题解 我们枚举最后剩下的球的种类,那么其他球可以看做没用了. 设选定的球有\(a_i\)个,球的总数为\(s=\sum_{i=1}^n a_i\). 现在问题变为:在一个长度为\(s\ ...
- Codeforces Round #293 (Div. 2) A. Vitaly and Strings
A. Vitaly and Strings time limit per test 1 second memory limit per test 256 megabytes input standar ...
- 【云计算】使用privilege权限对Docker内核参数进行定制
探讨Docker容器中修改系统变量的方法 探讨完Docker对共享内存状态持久化的支持状况后,我将遗留产品build到一个pre-production image中,测试启动是否OK.很显然,我过于乐 ...
- Django-进阶之路--信号
Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...
- 1977年提出的OSI七层模型
OSI七层模型: 7应用层 数据用户接口,提供人操作软件的接口 6表示层 数据的表现形式,特定的功能实现,比如数据加密.数据传输的编码等,一般由软件完成 ...