go高质量编程|青训营笔记

52 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5天

简介

编写的代码能够达到正确可靠、简洁清晰的目标才能称之为高质量代码,编写所谓的高质量代码应该注意以下几点

  • 各种边界条件是否考虑完备
  • 异常情况处理、稳定性保证
  • 易读易维护

编程原则

简单

何为要求编程简单的原则,下面我们通过二个代码例子来进行比对

获取当前的星期

public class test {
    public static void main(String[] args) {
        Date date = new Date();
        String s = date.toString();
        System.out.println(date.getDay());
    }
}

获取当前的星期+

public class test {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date.getDay());
    }
}

也就是说这二个代码其实差别看起来并不是太大,唯一的就是少了一行代码,就是代码的冗余性问题,因为第一个例子的第二行代码并没有利用到,所以说要尽量的优化和简单,不要有冗余的问题。

可读

下面我依然举例子说明一下可读性的重要性,例如像下面的java代码,我并没有进行任何的注释,甚至格式也有点不好看

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    //BigInteger res=new BigInteger("0");
    int count = 0;
    if (N < 10000) {
        for (int i = 1; i <= N; i++) {
            //res= BigInteger.valueOf(i*i*i);
            for (int j = 1; j <= i*i*i; j++) {
                String sum= String.valueOf(i*i*i);
                String num= String.valueOf(j*j);
                if (sum.equals(num)) {
                    count++;
                    System.out.println(i + "*" + i +"*"+i +"=" + i*i*i+"="+(j * j) + "=" + j + "*" + j);
                    break;
                }
                //break;
            }
        }
        System.out.println(count);
    }
​
}

这种代码我相信各位读者看着就是一脸懵逼,因为确实很懵逼,不知道要这串代码是要做什么事情,甚至看着看着可能就会打瞌睡等等,可读性是十分的差,所以代码需要有一定的可读性例如下列代码

public class HelloWorldSwing {
    /**{
     * 创建并显示GUI。出于线程安全的考虑,
     * 这个方法在事件调用线程中调用。
     */
    private static void createAndShowGUI() {
        // 确保一个漂亮的外观风格
        JFrame.setDefaultLookAndFeelDecorated(true);
​
        // 创建及设置窗口
        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
​
        // 添加 "Hello World" 标签
        JLabel label = new JLabel("Hello World");
        frame.getContentPane().add(label);
​
        // 显示窗口
        frame.pack();
        frame.setVisible(true);
    }
​
    public static void main(String[] args) {
        // 显示应用 GUI
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

这个我估计一看就知道其实就是生成一个GUI的应用,用的java_swing来进行展示,这样一看就懂,甚至可能读者在需要学习的时候只需要看自己需要的部分,从而提高学习效率。

生产力

生产力实则看的就是一个工作效率,希望别人做一件事情的时候自己可以做很多事情,那么如何提升生产力呢,根据软件工程的概念,需求分析、概要设计、详细设计、编码、测试等一样都不要少,按照流程一步一步来,总体的效率就会有所提高。

编码规范

代码格式

例如go语言,代码格式我推荐使用gofmt自动格式化代码,

gofmt

go语言官方提供的工具,能自动格式化go语言代码为官方统一的风格常见的IDE都支持方便配置

goimports

也是go语言官方提供的工具,实际等于gofmt加上依赖包管理,自动增删依赖包引用、将依赖包按字母排序并分类

注释

go语言的注释代码

合适注释公共符号,来解释代码的作用

例如

image.png

  • 按照这样的公共注释规范来编写代码
  • 注释代码的实现过程
  • 注释代码这样实现的原因
  • 注释代码什么情况下可能出错
  • 公共符号要求注释

总结:代码是最好的注释,注释应该提供代码没有表达出上下问的信息

命名规范

变量命名:命名尽量的简洁,缩写词全部大写、全局变量在其名字中需要根本更多的上下文信息、使得在不同的地方可以轻易辨认出意思

函数命名:函数名不携带包名上下文信息,因为包名和函数名总是成对出现的、函数名尽量简短。

包类命名:只由小写的字母组成、不包含大写字母和下划线字符等、简短并包含一定的上下文信息、不要与标准库同名。

控制流程

  • 避免嵌套,保持正常流程清晰例如
  • 尽量保持正常代码路径为最小缩进

总结:线性原理、处理逻辑尽量走直线、避免复杂的嵌套分支,正常流程代码沿着屏幕向下移动、提升代码可维护性和可读性,故障问题大多出现复杂的条件语句和循环语句中。

个人总结

go语言的编码规范其实和很多编码规范大同小异,可以借鉴其他语言的编程原则来约束go语言

引用