作一個不復制粘貼的程序員[0]: 概述

前言

Perl語言之父拉里·沃爾曾說過程序員有三大美德:懶惰、急躁、傲慢,不少程序員在平時工做中經常作不少重複的事情,寫不少重複的代碼,若是有懶惰的思想,就能夠避免不少重複,從而提升開發效率,增長編程樂趣,咱們須要的是一種智慧的懶惰。java

舉個生活中重複的例子,咱們會關注一些大佬的博客,爲了看他們有沒有更新博文,咱們常常會挨個點進他們的博客主頁。若是會用RSS的話,只要點進RSS客戶端首頁,就能看到哪些博主有了新的文章。生活中重複的例子還有不少,本系列文章只談談編程中的重複。git

說到代碼層面的重複,不得不提起一個著名的軟件設計原則:DRY(Don’t Repeat Yourself),大概說的是應該避免重複的代碼。不過也有人寫過《DRY原則的危害》的文章,主要說不要過分抽象,不要太教條。我以爲各類技術、思想、原則,若是正確地使用都會有好處的,反之則會帶來一些危害,若是不會用那不如不用。程序員

重複的危害你們應該都有體會,好比浪費時間、不利於重構、容易出錯等。選擇複製粘貼其實也是一種懶惰,懶於思考,這會讓咱們工做十年,每一年寫的是同樣的代碼,一直沒有進步。順帶提一下複製粘貼的技巧,有種叫歷史粘貼板的東西,IDEA和Win10都有這個功能。github

Talk is cheap. Show me the code.

下面舉一個避免複製粘貼的代碼例子,這其實屬於後面第四篇文章所談的代碼生成。Java項目中常常會寫不少枚舉類,通常這些枚舉有兩個字段,一是枚舉值,對應數據庫中存在的字段,二是枚舉類型描述,用於展示,並且經常須要一個根據枚舉值獲取枚舉實例的方法。咱們可使用IDE的模板文件功能,只要肯定枚舉類名,就能夠自動生成全部的模板代碼。IDEA配置在"Settings -> Editor -> File and Code Templates -> Files -> Enum"下粘貼如下代碼(省略了註釋),完整代碼見個人Gist: idea-enum-file-template.java. 當須要新建一個枚舉類型時,只要在"Create New Class"對話框中輸入類名,"Kind"選擇"Enum"便可。數據庫

#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
    #parse("File Header.java")
    public enum ${NAME} {
        ;

        private final int value;
        private final String desc;

        ${NAME}(int value, String desc) {
            this.value = value;
            this.desc = desc;
        }

        public int getValue() {
            return this.value;
        }

        public String getDesc() {
            return desc;
        }

        private static final Map<Integer, ${NAME}> MAP = Arrays.stream(${NAME}.values())
                .collect(Collectors.toMap(${NAME}::getValue, e -> e));

        public static ${NAME} getByValue(Integer value) {
            return MAP.get(value);
        }
    }

本系列的目錄

給本身挖個坑,後面博文從如下方面談談如何作一個不復制粘貼的程序員:編程

  1. 提取方法
  2. 使用模板模式
  3. 使用AOP
  4. 代碼生成
相關文章
相關標籤/搜索