• 前言

最近接手的一些项目,不同的人编码风格迥异,类里的变量、方法的定义穿插,注释极为稀少,更有一些变量和方法的命名非常近似,例如表示播放队列的"playQueue"和表示歌单的"playList",wtf?

这不是一个意思吗?一些回调的时机也不能直观的看出来,通常需要debug调试多次;multi project之间值的传递、广播跨进程的发送、服务的开启和绑定,一句注释都没有,不知道过了这么久,

这些代码的同事,还能很快看懂自己写的东西吗?这简直让人抓狂啊,于是乎,写下此篇博客,吐槽别人的同时,更要引以为鉴,通过一些实际而有效的方法让自己代码更具可读性.

  • 代码中行而有效的几点
  1. 放置常量与变量的排位顺序

    • 第一层放置顺序的规则:
      常量->变量->接口->内部类.
    • 第二层,各个类型内部又区分为:
      静态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中的体现的更多相关文章

  1. 《修改代码的艺术》【PDF】下载

    <修改代码的艺术>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382309 内容简介 <修改代码的艺术>针对大型的. ...

  2. ENode 1.0 - 事件驱动架构(EDA)思想的在框架中如何体现

    开源地址:https://github.com/tangxuehua/enode 上一篇文章,我给大家分享了我的一个基于DDD以及EDA架构的框架enode,但是只是介绍了一个大概.接下来我准备用很多 ...

  3. enode框架step by step之事件驱动架构(EDA)思想的在框架中如何体现

    enode框架step by step之事件驱动架构(EDA)思想的在框架中如何体现 上一篇文章,我给大家分享了我的一个基于DDD以及EDA架构的框架enode,但是只是介绍了一个大概.接下来我准备用 ...

  4. 适配器在JavaScript中的体现

    适配器设计模式在JavaScript中非常有用,在处理跨浏览器兼容问题.整合多个第三方SDK的调用,都可以看到它的身影. 其实在日常开发中,很多时候会不经意间写出符合某种设计模式的代码,毕竟设计模式就 ...

  5. 读书报告之《改动代码的艺术》 (I)

    <改动代码的艺术>,英文名<Working Effectively with Legacy Code>,中文翻译的文笔上绝对谈不上"艺术"二字.愧对艺术二字 ...

  6. Scala 深入浅出实战经典 第51讲:Scala中链式调用风格的实现代码实战及其在Spark中应用

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  7. Scala 深入浅出实战经典 第48讲:Scala类型约束代码实战及其在Spark中的应用源码解析

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  8. Scala 深入浅出实战经典 第47讲:Scala多重界定代码实战及其在Spark中的应用

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  9. 代理模式及其在spring与struts2中的体现

    代理模式 代理模式有三个角色组成: 1.抽象主题角色:声明了真实主题和代理主题的共同接口. 2.代理主题角色:内部包含对真实主题的引用,并且提供和真实主题角色相同的接口. 3.真实主题角色:定义真实的 ...

随机推荐

  1. python cookbook 学习系列(一) python中的装饰器

    简介 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓 ...

  2. 【前端】screenX/Y, clientX/Y, pageX/Y 的区别

    一图胜千言. 做了一个图:

  3. Java基础知识强化之IO流笔记02:try...catch的方式处理异常

    1. 案例示例: package com.himi.trycatch; public class ExceptionDemo { public static void main(String[] ar ...

  4. SQL Server 数据库定时自动备份

    原文:SQL Server 数据库定时自动备份 SQL Server 数据库定时自动备份——每天定时备份,保留前8天的备份 利用SQL Server代理新建作业来定期备份 1)在数据库库的[SQL S ...

  5. UVALive 3177 Beijing Guards

    题目大意:给定一个环,每个人要得到Needi种物品,相邻的人之间不能得到相同的,问至少需要几种. 首先把n=1特判掉. 然后在n为偶数的时候,答案就是max(Needi+Needi+1)(包括(1,n ...

  6. 毕设记录(ajax第一次请求失败,之后成功的问题)

    解决方法:将button标签的type属性改为button,而不是submit,将会解决此问题,至于原因,,,还是没太搞清楚..

  7. C#开发微信支付之企业向用户付款

    1.企业付款的介绍 所谓企业付款指的是,在功能开放后诸如保险行业的客户理赔.退保.商品退款.发放征集活动奖金.抽奖互动等操作都可以通过企业付款完成.而此前,微信支付只能提供客户向企业单向付款. 商户如 ...

  8. windows Server 2012/2016 路由和远程访问,PPPOE,ADSL,连接接口时出现一个错误,连接被远程计算机终止

    经过查询资料,是由mprddm.dll的bug引起的. 修改位置: 将je修改为jmp. 查找修改位置,可参考 前面的RasGetPortUserData的调用,或者 后面的 字符串 64位dll可使 ...

  9. URAL 1658 Sum of Digits

    URAL 1658 思路: dp+记录路径 状态:dp[i][j]表示s1为i,s2为j的最小位数 初始状态:dp[0][0]=0 状态转移:dp[i][j]=min(dp[i-k][j-k*k]+1 ...

  10. dmidecode详解

    1.DMI简介 DMI (Desktop Management Interface, DMI)就是帮助收集电脑系统信息的管理系统,DMI信息的收集必须在严格遵照SMBIOS规范的前提下进行. SMBI ...