如何利用Visual Studio 2015搭建并开发淘宝卷网站?
摘要:vs 2015可以做网站吗,怎么做淘宝卷网站,免费下载访问迅雷网盘,网站快速排名怎么做Java 命名格式规范 概述 简洁清爽的代码风格应该是大多数开发工程师所期待的。在编码过程中笔者常常因为起名字而纠结,夸张点
vs 2015可以做网站吗,怎么做淘宝卷网站,免费下载访问迅雷网盘,网站快速排名怎么做Java 命名格式规范
概述
简洁清爽的代码风格应该是大多数开发工程师所期待的。在编码过程中笔者常常因为起名字而纠结#xff0c;夸张点可以说是编程 5 分钟#xff0c;命名两小时#xff01;究竟为什么命名成为了编码中的拦路虎。
每个公司都有不同的标准#xff0c;目…Java 命名格式规范
概述
简洁清爽的代码风格应该是大多数开发工程师所期待的。在编码过程中笔者常常因为起名字而纠结夸张点可以说是编程 5 分钟命名两小时究竟为什么命名成为了编码中的拦路虎。
每个公司都有不同的标准目的是为了保持统一减少沟通成本提升团队研发效能。所以本文中是笔者结合阿里巴巴开发规范以及编码中的见闻针对 Java 领域相关命名进行整理和总结仅供学习以及参考。
为什么需要重视命名
先搞懂为什么要重视编程中的命名这一行为它对于我们的编码工作有着什么意义。
好的命名即是注释别人一看到你的命名就知道你的变量、方法或者类是做什么的
《Clean Code》这本书中明确指出 好的代码本身就是注释我们要尽量规范和美化自己的代码来减少不必要的注释。 若编程语言足够有表达力就不需要注释尽量通过代码来阐述。 命名规范介绍
驼峰命名法CamelCase
这种命名方式使用大小写混合的格式来区别各个单词并且单词之间不使用空格隔开或者连接字符连接的命名方式。
大驼峰命名法UpperCamelCase
Java中的类名需要使用大驼峰命名法。
小驼峰命名法lowerCamelCase
Java中的方法名、参数名、成员变量、局部变量需要使用小驼峰命名法。
蛇形命名法snake_case
测试方法名、常量、枚举名称需要使用蛇形命名法。
Test
void should_get_200_status_code_when_request_is_valid() {......
}Test
void shouldGet200StatusCodeWhenRequestIsValid() {......
}串式命名法kebab-case
在串式命名法中各个单词之间通过连接符“-”连接比如dubbo-registry。
建议项目文件夹名称使用串式命名法kebab-case比如spring cloud alibaba中的命名格式
命名易读性规范
1、为了能让命名更加易懂和易读尽量不要缩写/简写单词除非这些单词已经被公认可以被这样缩写/简写。比如 CustomThreadFactory 不可以被写成 CustomTF 。
2、命名不像函数一样要尽量追求短可读性强的名字优先于简短的名字虽然可读性强的名字会比较长一点。 这个对应我们上面说的第 1 点。
3、避免无意义的命名你起的每一个名字都要能表明意思。
正例UserService userService; int userCount;
反例: UserService service; int count
4、避免命名过长50 个字符以内最好过长的命名难以阅读并且丑陋。
5、不要使用拼音更不要使用中文。 不过像 alibaba 、wuhan、taobao 这种国际通用名词可以当做英文来看待。
Java 命名规范
好的命名能体现出代码的特征含义乃至是用途让读者可以根据名称的含义快速梳理清楚程序的脉络。不同语言中采用的命名形式大相径庭Java 中常用到的命名形式共有三种既首字母大写的 UpperCamelCase大驼峰首字母小写的 lowerCamelCase小驼峰 以及全部大写的并用下划线分割单词的UPPER_CAMEL_UNSER_SCORE。
通常约定类一般采用大驼峰命名方法和局部变量使用小驼峰命名而大写下划线命名通常是常量和枚举中使用
类型约束例项目名全部小写多个单词用中划线分隔‘-’spring-cloud包名全部小写com.alibaba.fastjson类名单词首字母大写Feature, ParserConfig,DefaultFieldDeserializer变量名首字母小写多个单词组成时除首个单词其他单词首字母都要大写password, userName常量名全部大写多个单词用’_分隔CACHE_EXPIRED_TIME方法同变量read(), readObject(), getById()
类命名
类名使用大驼峰命名形式类命通常是名词或名词短语接口名除了用名词和名词短语以外还可以使用形容词或形容词短语如 CloneableCallable 等表示实现该接口的类有某种功能或能力。对于测试类则以它要测试的类开头以 Test 结尾如 HashMapTest。
对于一些特有名词缩写也可以使用全大写命名比如 XMLHttpRequest不过笔者认为缩写三个字母以内都大写超过三个字母则按照单词算。这个没有标准如阿里巴巴中 fastjson 用 JSONObject 作为类命而 google 则使用 JsonObjectRequest 命名对于这种特殊的缩写原则是统一就好。
属性约束例抽象类Abstract 或者 Base 开头BaseUserService / AbstractBeanFactory枚举类Enum 作为后缀GenderEnum工具类Utils 作为后缀StringUtils异常类Exception 结尾RuntimeException接口实现类接口名 ImplUserServiceImpl领域模型相关/DO/DTO/VO/DAO正例UserDAO 反例UserDo UserDao设计模式相关类BuilderFactory 等当使用到设计模式时需要使用对应的设计模式作为后缀如 ThreadFactory处理特定功能的HandlerPredicate, Validator表示处理器校验器断言这些类工厂还有配套的方法名如 handlepredicatevalidate测试类Test 结尾UserServiceTest 表示用来测试 UserService 类的MVC 架构ControllerServiceServiceImplDAO 后缀UserManageControllerUserManageDAO
方法
方法命名采用小驼峰的形式首字小写往后的每个单词首字母都要大写。和类名不同的是方法命名一般为动词或动词短语与参数或参数名共同组成动宾短语即动词 名词。一个好的函数名一般能通过名字直接获知该函数实现什么样的功能。
1 返回真伪值的方法
注Prefix-前缀Suffix-后缀Alone-单独使用
位置单词意义例Prefix前缀is对象是否符合期待的状态isValidPrefixcan对象能否执行所期待的动作canRemovePrefixshould调用方执行某个命令或方法是好还是不好,应不应该或者说推荐还是不推荐shouldMigratePrefixhas对象是否持有所期待的数据和属性hasObserversPrefixneeds调用方是否需要执行某个命令或方法needsMigrate
2 用来检查的方法
单词意义例ensure检查是否为期待的状态不是则抛出异常或返回 error codeensureCapacityvalidate检查是否为正确的状态不是则抛出异常或返回 error codevalidateInputs
3 按需求才执行的方法
位置单词意义例Suffix后缀IfNeeded需要的时候执行不需要的时候什么都不做drawIfNeededPrefixmight同上mightCreatePrefixtry尝试执行失败时抛出异常或是返回 errorcodetryCreateSuffixOrDefault尝试执行失败时返回默认值getOrDefaultSuffixOrElse尝试执行、失败时返回实际参数中指定的值getOrElsePrefixforce强制尝试执行。error 抛出异常或是返回值forceCreate, forceStop
4 异步相关方法
位置单词意义例Prefixblocking线程阻塞方法blockingGetUserSuffixInBackground执行在后台的线程doInBackgroundSuffixAsync异步方法sendAsyncSuffixSync对应已有异步方法的同步方法sendSyncPrefix or AlonescheduleJob 和 Task 放入队列schedule, scheduleJobPrefix or Alonepost同上postJobPrefix or Aloneexecute执行异步方法注我一般拿这个做同步方法名execute, executeTaskPrefix or Alonestart同上start, startJobPrefix or Alonecancel停止异步方法cancel, cancelJobPrefix or Alonestop同上stop, stopJob
5 回调方法
位置单词意义例Prefixon事件发生时执行onCompletedPrefixbefore事件发生前执行beforeUpdatePrefixpre同上preUpdatePrefixwill同上willUpdatePrefixafter事件发生后执行afterUpdatePrefixpost同上postUpdatePrefixdid同上didUpdatePrefixshould确认事件是否可以发生时执行shouldUpdate
6 操作对象生命周期的方法
单词意义例initialize初始化。也可作为延迟初始化使用initializepause暂停onPause pausestop停止onStopstopabandon销毁的替代abandondestroy同上destroydispose同上dispose
7 与集合操作相关的方法
单词意义例contains是否持有与指定对象相同的对象containsadd添加addJobappend添加appendJobinsert插入到下标 ninsertJobput添加与 key 对应的元素putJobremove移除元素removeJobenqueue添加到队列的最末位enqueueJobdequeue从队列中头部取出并移除dequeueJobpush添加到栈头pushJobpop从栈头取出并移除popJobpeek从栈头取出但不移除peekJobfind寻找符合条件的某物findById
8 与数据相关的方法
单词意义例create新创建createAccountnew新创建newAccountfrom从既有的某物新建或是从其他的数据新建fromConfigto转换toStringupdate更新既有某物updateAccountload读取loadAccountfetch远程读取fetchAccountdelete删除deleteAccountremove删除removeAccountsave保存saveAccountstore保存storeAccountcommit保存commitChangeapply保存或应用applyChangeclear清除数据或是恢复到初始状态clearAllreset清除数据或是恢复到初始状态resetAll
9 成对出现的动词
单词意义get 获取set 设置add 增加remove 删除create 创建destory 移除start 启动stop 停止open 打开close 关闭read 读取write 写入load 载入save 保存create 创建destroy 销毁begin 开始end 结束backup 备份restore 恢复import 导入export 导出split 分割merge 合并inject 注入extract 提取attach 附着detach 脱离bind 绑定separate 分离view 查看browse 浏览edit 编辑modify 修改select 选取mark 标记copy 复制paste 粘贴undo 撤销redo 重做insert 插入delete 移除add 加入append 添加clean 清理clear 清除index 索引sort 排序find 查找search 搜索increase 增加decrease 减少play 播放pause 暂停launch 启动run 运行compile 编译execute 执行debug 调试trace 跟踪observe 观察listen 监听build 构建publish 发布input 输入output 输出encode 编码decode 解码encrypt 加密decrypt 解密compress 压缩decompress 解压缩pack 打包unpack 解包parse 解析emit 生成connect 连接disconnect 断开send 发送receive 接收download 下载upload 上传refresh 刷新synchronize 同步update 更新revert 复原lock 锁定unlock 解锁check out 签出check in 签入submit 提交commit 交付push 推pull 拉expand 展开collapse 折叠begin 起始end 结束start 开始finish 完成enter 进入exit 退出abort 放弃quit 离开obsolete 废弃depreciate 废旧collect 收集aggregate 聚集
变量名
变量是指在程序运行中可以改变其值的量包括成员变量和局部变量。变量名由多单词组成时第一个单词的首字母小写其后单词的首字母大写俗称骆驼式命名法也称驼峰命名法如 computedValuesindex、变量命名时尽量简短且能清楚的表达变量的作用命名体现具体的业务含义即可。
变量名不应以下划线或美元符号开头尽管这在语法上是允许的。变量名应简短且富于描述。变量名的选用应该易于记忆即能够指出其用途。尽量避免单个字符的变量名除非是一次性的临时变量。pojo 中的布尔变量都不要加 is(避免出现序列化问题数据库中的布尔字段全都要加 is_ 前缀)。
代码注解
注解原则
好的命名能够增加代码阅读性代码的命名往往有严格的限制。
但是注解不同程序员往往可以自由发挥但是这并不意味着可以为所欲为书写注解。优雅的注解通常要满足三要素。 Nothing is strange **没有注解的代码对于阅读者非常不友好。**哪怕代码写的在清楚阅读者至少从心理上会有抵触更何况代码中往往有许多复杂的逻辑所以一定要写注解不仅要记录代码的逻辑还有说清楚修改的逻辑。 Less is more **从代码维护角度来讲代码中的注解一定是精华中的精华。**合理清晰的命名能让代码易于理解对于逻辑简单且命名规范能够清楚表达代码功能的代码不需要注解。滥用注解会增加额外的负担更何况大部分都是废话。 // 根据id获取信息【废话注解】
getMessageById(idAdvance with the time **注解应该随着代码的变动而改变。**注解表达的信息要与代码中完全一致。通常情况下修改代码后一定要修改注解。
注解格式
注解大体上可以分为两种一种是 javadoc 注解另一种是简单注解。javadoc 注解可以生成 JavaAPI 为外部用户提供有效的支持。 javadoc 注解通常在使用 IDEA或者 Eclipse 等开发工具时都可以自动生成也支持自定义的注解模板仅需要对对应的字段进行解释。参与同一项目开发的同学尽量设置成相同的注解模板。
a. 包注解
包注解在工作中往往比较特殊通过包注解可以快速知悉当前包下代码是用来实现哪些功能强烈建议工作中加上尤其是对于一些比较复杂的包包注解一般在包的根目录下名称统一为 package-info.java。
/*** 落地质量检测* 1. 用来解决什么问题* 对广告主投放的广告落地页进行性能检测模拟不同的系统如AndroidIOS等; 模拟不同的网络2G3G4Gwifi等** 2. 如何实现* 基于chrome浏览器用chromedriver驱动浏览器设置对应的网络OS参数获取到浏览器返回结果。** 注意网络环境配置信息{link cn.mycookies.landingpagecheck.meta.NetWorkSpeedEnum}目前使用是常规速度可以根据实际情况进行调整** author coder* time 2019/12/7 20:3 下午*/
package cn.mycookies.landingpagecheck;b. 类注接
javadoc 注解中每个类都必须有注解。
/**
* Copyright (C), 2019-2020, Jann balabala...
*
* 类的介绍这是一个用来做什么事情的类有哪些功能用到的技术.....
*
* author 类创建者姓名 保持对齐
* date 创建日期 保持对齐
* version 版本号 保持对齐
*/c. 属性注解
在每个属性前面必须加上属性注释通常有一下两种形式至于怎么选择你高兴就好不过一个项目中要保持统一。
/** 提示信息 */
private String userName;/*** 密码*/
private String password;d. 方法注释
在每个方法前面必须加上方法注释对于方法中的每个参数以及返回值都要有说明。
/*** 方法的详细说明能干嘛怎么实现的注意事项...** param xxx 参数1的使用说明 能否为null* return 返回结果的说明 不同情况下会返回怎样的结果* throws 异常类型 注明从此类方法中抛出异常的说明*/e. 构造方法注释
在每个构造方法前面必须加上注释注释模板如下
/*** 构造方法的详细说明** param xxx 参数1的使用说明 能否为null* throws 异常类型 注明从此类方法中抛出异常的说明*/而简单注解往往是需要工程师自己定义在使用注解时应该注意一下几点
枚举类的各个属性值都要使用注解枚举可以理解为是常量通常不会发生改变通常会被在多个地方引用对枚举的修改和添加属性通常会带来很大的影响。保持排版整洁不要使用行尾注释双斜杠和星号之后要用 1 个空格分隔。
id 1;// 反例不要使用行尾注释//反例换行符与注释之间没有缩进
int age 18;// 正例姓名
String name;/*** 1. 多行注释** 2. 对于不同的逻辑说明可以用空行分隔*/
