查看原文
其他

求求你规范下你的代码风格

帅地 苦逼的码农 2019-03-29


本文字数:2500字

阅读本文大概需要:7 分钟

代码风格并不影响程序的运行,也不会给你的程序带来潜在的危险。但一段好的代码风格,能让人阅读起来特别舒服,特别的阅读别人代码的时候,有些人的代码可以说是完全不注意空格、缩进、大小写的,看起来特别不舒服。

给人好的印象,从一段代码风格开始。今天我总结了几个最常用到的代码规范、可以说你每时每刻都会接触到的了,也比较简单,如果你平时没有按这些规范写的话,建议慢慢改过来。

1. 类名

类名采用大驼峰的命名形式,所谓大驼峰就是首字母大写,例如UpperCameCase。

抽象类命名使用 Abstract 或 Base 开头;异常类使用 Exception 结尾;测试类命名以测试的类名开始,以 Test 结尾。

枚举类名带上 Enum 作为后缀,枚举成员名称需要大写,单词间用下画线隔开。

2. 包名

包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。一般单词使用单数形式,但是类名如果有复数含义的话,则可以使用复数形式。

3. 变量

变量可分为不可变量(常量)可变变量

(1). 常量

在 Java 中,常量一般指 final 关键字修饰的变量。

1、全局常量类内常量的命名采用字母全部大写,单词之间加下画线的方式。

所谓全局常量指的是类的公开静态属性,使用 public static final 修饰;类内常量指的是私有静态属性,使用 private static final 修饰。

2、局部常量则采用小驼峰的形式。所谓局部常量指的是方法内的常量。

例子展示(代码片可以左右移动):

1public class Constant {
2    //全局常量
3    public static final String MY_NAME = "shuaidi";
4    //类内常量
5    private static final String MY_SEX = "男";
6
7    public void tt(){
8        //局部常量
9        final String myName = "shuaidi";
10    }
11}

(2). 可变变量

可变变量一般常用小驼峰的命名形式,如 myName ,小驼峰和大驼峰的区别就是,小驼峰首字母小写,而大驼峰首字母大写。不过需要注意的是,针对布尔类型的变量,在命名的时候,不要用 is 做前缀,否则部分框架在解析的时候会引起序列化错误。

例如标识是否删除的成员变量 Boolean isDeleted, 它的 getter 方法也是 isDeleted(),框架在反向解析的时候,会误认为对应的属性名称为 deleted,从而引起错误。

4. 空格

我发现很多人在写代码的时候,在运算符、赋值、参数等之间很少使用空格来隔开各种元素之间的距离,例如

1//错误例子示范,注:里面的代码之间没啥联系,都是随意给出的。
2int a=1
3int b=a==1?1:2;
4if(a==1&&b==2){
5    print(a,b);//调用打印函数
6}else{
7
8}
9public static void print(int a,int b){
10    System.out.printf(a+b);
11}

像上面的这个例子中,就是几乎没用到空格的,代码看起来很紧,反正我看起来是很不舒服,特别的当代码很多的时候。

下面是我给的关于加空格的几点建议:

1、二目、三目运算符的左右两边都应该加一个空格。

2、注释的双斜线与注释内容之间有且仅有一个空格。

3、方法参数在定义和传入参数时,多个参数逗号后边都应该加空格。

4、如果大括号为空,则简洁地写成{}即可,大括号中间无须换行和加空格。

5、左右小括号与括号内部的相邻字符之间不要出现空格。

6、左大括号前需要加空格。

所以,修改后如下:

1int a = 1;
2int b = a == 1 ? 1 : 2;
3if(a == 1 && b == 2) {
4    print(a, b);
5else {}
6
7public static void print(int a, int b) {
8    System.out.printf(a + b);// 调用打印函数
9}

这样看起来舒服多了,特别是在括号内参数多的时候。

5. 控制语句

控制语句可以说是最容易出现 bug 的地方,所以代码风格的约束极为重要,而不是天马行空地乱跳。因此,控制语句必须遵循如下约定:

1、在 if, for, while, do-while 等语句中必须使用大括号,即使只有一行代码,也应该加上大括号。例如:

1int sum = 0;
2for(int i = 0; i < 10; i++) {
3    sum += i;// 尽管只有一行/
4}

2、在条件表达式中不允许出现赋值操作,也不允许在判断表达式中出现复杂的所及组合。例如:

1//复杂的多级组合
2if((file.open(fileName, "w") != null) && (...) && (...)) {
3    dosomething();
4}

争取的做法应该是将复杂的多级运算赋值给一个具有业务含义的布尔变量。例如:

1boolean existed = (file.open(fileName, "w") != null) && (...) && (...);
2
3if(existed) {
4    dosomething();
5
6}

3、多层嵌套不能超过三层。

6. 关于缩进与空格

一个缩进的距离等于四个空格的距离,但究竟是要使用 Tab 缩进来调距离还是用四个空格代替一个缩进来调距离,这个貌似存在争议,有些大佬建议用 Tab 键,有些大佬建议用空格。我在《码出高效Java开发手册》里,本书的作者是推荐四个空格缩进,禁止使用Tab键。

当然,你在使用IDE的时候,当你换行时,很多编辑器是会帮你自动缩进的,大多数IDE都是默认四个空格来缩进。

不过很多 IDE 工具提供了 Tab 键与空格之间的快速转换设置。例如对于 IDEA 这个工具,要设置 Tab 键为四个空格时,可以在设置那里勾选 Use tab character(setting->editor->Code Style->选择你想编辑的语言);而在 Eclipse 中,就得勾选 Insert spaces for tabs。

上面讲的这几点,可以说是无时无刻都在和他们打交道的了,其他比较少接触的我就不列出来了。你平时有木按照这种风格来写呢?

推荐阅读

为什么C语言不会过时?

为啥用ip不可以访问知乎,而百度却可以?

漫画:程序员之间的真爱,好暖啊!

万水千山总是情,点个好看行不行!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存