編程之美

原創文章,謝絕轉載。java

首先,拋出一個問題,代碼是什麼?

  咱們先來看看百度百科給出的釋義:
  代碼就是程序員用開發工具所支持的語言寫出來的源文件,是一組由字符、符號或信號碼元以離散形式表示信息的明確的規則體系。代碼設計的原則包括惟一肯定性、標準化和通用性、可擴充性與穩定性、便於識別與記憶、力求短小與格式統一以及容易修改等。 源代碼是代碼的分支,某種意義上來講,源代碼至關於代碼。現代程序語言中,源代碼能夠書籍或磁帶形式出現,但最爲經常使用格式是文本文件,這種典型格式的目的是爲了編譯出計算機程序。計算機源代碼最終目的是將人類可讀文本翻譯成爲計算機可執行的二進制指令,這種過程叫編譯,它由經過編譯器完成。
  百科給出的說明稍顯複雜,不過,總的來講是解釋的比較詳細的。若是要我來作個簡單介紹,我以爲代碼就是人類書寫的一段可以轉化爲機器可執行的一段文字,這段文字多是天然語言,也多是非天然語言。早期來講,代碼都是非天然語言,人類沒法很是直觀的看出一段代碼的含義,到了如今,代碼基本都是天然語言,每段代碼都包含天然語義,只要你懂英文,就算不是程序猿也可以大概的看懂一段簡單的代碼。
  由上面的說明不難看出,代碼到最後都是須要從天然語言到機器語言進行轉換,而後機器才能運行這些代碼。簡單來講,代碼是給機器執行的而存在的,一份不能或者不須要被執行的代碼,基本能夠說是沒有意義的。而衡量一段代碼的價值的最好標準莫過於看這段代碼運行了多久,運行了多少次。你說別人代碼寫的很差,可是別人的代碼運行了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,你寫的好或差,只要執行結果不錯對於它來講沒有太多本質區別,它只管執行就是了。可是但願你們記住一句話:
   代碼,首先是給人看的,其次纔是給機器執行的。   若是你能多思考理解下這句話,相信你的代碼質量會有一個質的提高!
相關文章
相關標籤/搜索