编程之美

607 阅读6分钟

原创文章,谢绝转载。

首先,抛出一个问题,代码是什么?

  我们先来看看百度百科给出的释义:
  代码就是程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。代码设计的原则包括唯一确定性、标准化和通用性、可扩充性与稳定性、便于识别与记忆、力求短小与格式统一以及容易修改等。 源代码是代码的分支,某种意义上来说,源代码相当于代码。现代程序语言中,源代码可以书籍或磁带形式出现,但最为常用格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码最终目的是将人类可读文本翻译成为计算机可执行的二进制指令,这种过程叫编译,它由通过编译器完成。
  百科给出的说明稍显复杂,不过,总的来说是解释的比较详细的。如果要我来做个简单介绍,我觉得代码就是人类书写的一段能够转化为机器可执行的一段文字,这段文字可能是自然语言,也可能是非自然语言。早期来说,代码都是非自然语言,人类无法非常直观的看出一段代码的含义,到了现在,代码基本都是自然语言,每段代码都包含自然语义,只要你懂英文,就算不是程序猿也能够大概的看懂一段简单的代码。
  由上面的说明不难看出,代码到最后都是需要从自然语言到机器语言进行转换,然后机器才能运行这些代码。简单来说,代码是给机器执行的而存在的,一份不能或者不需要被执行的代码,基本可以说是没有意义的。而衡量一段代码的价值的最好标准莫过于看这段代码运行了多久,运行了多少次。你说别人代码写的不好,但是别人的代码运行了10年了,你说你自己的代码算法精妙,运行了几天就被人优化掉了,那么你们两个的代码谁更有价值呢?
  说了那么多,好像还没有说到今天的主题,下面咱们就聊聊编程之美,别的先不说,先上一份代码:

 public int xiao (int a, int b) {
        int c = 0;
        if (a < b) {
            c = a;
        }
        if (b < a) {
            c = b;
        }
        return c;
    }

    public int min (int num1, int num2) {
        if (num1 > num2) {
            return num2;
        }
        return num1;
    }

    public int min (int num1, int num2) {
        return num1 < num2 ? num1 : num2;
    }

  上面的代码非常简单,就是个接收两个数字并返回较小的一个数字的方法,只是使用了不同的写法进行书写,下面来分析下每种写法,第一种,太过啰嗦,且还有bug,而且没有遵循基本的编程命名规范,使用了拼音命名方法,造成如果不看方法体,你多半都不知道这个方法是干什么的,后面两种从命名和写法上来说相对都比较规范,没有出现严重的问题,不过第三种写法来说更为简洁。

那么,现在你有没有感受到一点点什么叫编程之美呢?如果还没有,下面我们再看一个例子

  public class Bean {
        private static final String TAG = "Bean";
        public static final int STATUS_SUCCESS = 0;
        public static final int STATUS_FAILED = 1;

        private String mUserName;
        private String mUserSex;
        private String mUserAge;
    }
    public class bean {
        public static final String tag = "bean";
        public static final int statusSuccess = 23;
        public static final int status_failed = 45621;

        public String ming_zi;
        private String xBIE;
        String NianLing;
    }

  这是一个非常常见的实体类的声明,可以看到第一种写法是非常中规中矩的,遵循英文命名,驼峰规范,权限该公有的公有该私有的私有等等,而第二种则是典型的反例,类名首写未大写,字段权限混乱,使用了拼音,命名结构混乱,常量取值诡异,把能犯的错挨个犯了一遍。作为一名正常的人,我相信看到第一份代码,心情是舒畅的,看到第二份代码,心里是骂娘的。

  如果现在你要问我什么是编程之美,我可以简单的说上面的就是编程之美。一份代码能够让阅读的人感觉轻松无比,甚至心旷神怡的,那么它就是一份优美的代码,相反的,如果一份代码,大家看到都觉得头痛,眼花,那么它就是混乱的代码。
  就好像你问我什么是美女,美女的标准是什么?其实根本没有严格的标准,你说瘦的好看,总有人喜欢丰满的,你说皮肤白皙的好看,总有人喜欢小麦色皮肤的。只要给人感觉很好,那么她就是美女,不需要太多标准。
  所谓编程之美亦是如此,世上本没有那么多标准,制定的人多了,便有了标准。所以想要写一份优美的代码,最简单的方法就是遵守标准来写,这样写多了,你发现自己的代码自然就变得更加优美了。对于写代码来说,最怕的就是随心所欲,单单是个变量命名,如果你太过奔放就能看得别人想死,更不谈其它的。每种编程语言都有自己的编程规范,能够照着各自的规范书写,代码看起来是最轻松的。
  不过,你说你写了10年C,现在叫你写java,你说你用C的规范来写java行不?很多人也许觉得不妥,不过我觉得是可以的,只要你在自己的代码中遵循了规范,那么代码看起来都不会是很差的,哪怕这份规范并不是当前语言的规范。编程最怕不是不是你用其它语言的规范来写当前语言的代码,而是你根本没有任何规范,这才是最可怕的。当然了,一般来讲一种编程语言的规范都是大家认可的,最好还是以当前语言的规范来书写。
  到这里,本文也差不多结束了,回头看看文章开头讨论的问题,可能有人会问,你开头明明说代码最后必然是给机器执行的,那么我写的代码优美与否又有什么关系,反正最后都是转换为机器语言,机器难道还会在乎你写的优美与否吗?
  确实,机器是不管你怎么写的,在它看来都是0和1,你写的好或差,只要执行结果不错对于它来说没有太多本质区别,它只管执行就是了。但是希望大家记住一句话:
  代码,首先是给人看的,其次才是给机器执行的。
  如果你能多思考理解下这句话,相信你的代码质量会有一个质的提升!