`
唐风汉月
  • 浏览: 51998 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java编码规范-命名

 
阅读更多

        软件命名随处可见,包括变量,函数,参数,类和包的命名,以下为取个好名字的几条简单规则:

        1、名副其实:

变量,函数或者类的名称已经答复了所有的大问题,它该告诉你,它为什么存在,它做什么事,应该怎么用。如果名称8注释来补充,那就不算是名副其实。

      举例一:

     ----------------------------------------不规范的代码------------------------------------------

          int d;//消逝的时间,以日计(名称d什么也没有说明,没有引起时间消逝的感觉,更别说以日计。)

 

        ---------------------------------------规范的代码----------------------------------------------

        int elapsedTimeDays;//这些名称更能让程序员易于理解和修改代码
        int daysSinceCreation;
        int daysSinceModification;
        int fileAgeDays;

 

        举例二:

        ----------------------------------------不规范的代码-------------------------------------------

        /**list是什么类型的东西?list零下标项的意义是什么?4的意义是什么?怎样使用返回的list?**/
        public List<int[]> getThem(){
                List<int[])> list1 = new ArrayList<int[]>();
               for (int[] x : list) {
                        if(x[0] == 4) {
                                list1.add(x);
                        }
               }
        }

 

        ---------------------------------------规范的代码----------------------------------------------

         /**只要简单改一下名字,就轻易地知道发生了什么,这就是选用好名称的力量**/
        public List<int[]> getFlaggedCells() {
                List<int[]> flaggedCells = new ArrayList<Cell>();
                for (int cell : gameBoard) {
                       if(cell[STATE_VALUE]=FLAGGED) {
                               flaggedCells.add(cell);
                        }
                }
                return flaggedCells;
        }

 

        ---------------------------------------规范的代码----------------------------------------------

        /**更进一步,不用int数组表示,而是用类来表示**/
        public List<Cell> getFlaggedCells() {
                List<Cell> flaggedCells = new ArrayList<Cell>();
                for (Cell cell : gameBoard) {
                        if(cell.isFlagged()) {
                                flaggedCells.add(cell);
                        }
               }
                return flaggedCells;
        }
 

 

        2、避免误导

 

        1)必须避免留下掩藏代码本意的错误线索。应当避免使用与本意相悖的词。

                如:别用accountList来指称一组帐号,除非它真的是List类型,即便它就是个List,最好也别在名称中写出容器类型名。可以用accountGroupbunchOfAccounts,甚至直接用accounts都会好些。

        2)防止使用相似的名称。

                如:想区分模块中某处的XYZActionForEfficientHandingOfSettingsXYZActionForEfficientStorageOfStrings,容易区分吗?是不是要瞪大眼睛去看?

 

        3、做有意义的区分

        不要说废话,废话都是冗余,废话就是一种没有意义的区分。譬如:

        1Variable一次永远不应当出现在变量中,Table一次永远不应当出现在表明中。

        2NameString会比Name好吗?难道Name会是一个float不成?如果是这样,就触犯了关于误导的规则。假如有个名为Customer的类,还有一个名为CustomerObject的类,区别何在呢?哪一个是表示“客户”的最佳途径呢?(名称虽然不能,意思却无区别)。

        举例一:

     ----------------------------------------不规范的代码------------------------------------------------

                public static void copyChars(char a1[], char a2[]){
                        for ( int i=0; i<a1.length; i++){
                                a2[i] = a1[i];
                        }
                }

                //如果参数名改为source和destination,这个函数会像样得多

 

        举例二:

     ----------------------------------------不规范的代码------------------------------------------------

                getActiveAccount();
                getActiveAccounts();
                getActiveAccountInfo();
               // 程序员怎么能知道该调用哪个函数呢?
               // 总之:如果没有明确的规定,accountInfo,accountData和account就没区别,要区分名称,就要以读者能鉴别不同之处的方式来区分

 

 

        4、使用读得出来的名称

        如果名称读不出来,讨论的时候就像个傻鸟。不要自造傻乎乎的自造词,而非恰当的英文词。

        举例:

        ----------------------------------------不规范的代码-------------------------------------------

               class DtaRcrd102 {
                        private Date genymdhms;
                        private Date modymdhms;
                        private final String pszqint=”102”;
                        /*………..*/
                }

 

        ---------------------------------------规范的代码---------------------------------------------

                 class Customer {
                        private Date generationTimestamp;
                        private Date modificationTimestamp;
                        private final String recordId=”102”;
                        /*………..*/
                }
 

 

        5、使用可搜索的名称

        单字母名称变量或者数字常量,很难在一大段代码中搜索出来。单字母名称仅仅用于短方法中的本地变量,名称长短应与其作用于大小相应。若变量或常量在代码中多处使用时,应赋其以便于搜索的名称。

        举例:

        ----------------------------------------不规范的代码------------------------------------------------

                for(int j=0;i<34;j++) {
                        s+=(t[j] * 4) / 5;
                }

 

        ---------------------------------------规范的代码---------------------------------------------

 

                int realDaysPerIdealDay = 4;
                const int WORK_DAYS_PER_WEEK =5;
                int sum = 0;
                for ( int j=0;j<NUMBER_OF_TASKS;l j++) {
                        int realTaskDays = taskEstimate[j] * realDaysPerIdealDay;
                        int realTaskWeeks = (realTaskDays / WORK_DAYS_PER_WEEK );
                        sum += realTaskWeeks;
                }

 

 

        6、避免使用编码

        1) 不要使用类型标记法:Java语言不需要类型编码,对象是强类型的,Eclipse可以在编译开始前就侦测到类型错误,所以类型编码纯属多余,反而增加了修改变量、函数或类的名称或者类型的难度,增加了阅读代码的难度,同时制造了让编码系统误导读者的可能性。

        举例:

        ----------------------------------------不规范的代码------------------------------------------------

PhoneNumner phoneString; //类型变化时,名称不变化!

 

        2)不要用前缀来标明成员变量:代码读得越多,最终就会严重无前缀,前缀就成了不入法眼的废料,旧代码的标志。

        举例:

        ----------------------------------------不规范的代码-----------------------------------------------

 

                public class Part {
                        private String m_dsc;// The textual description
                        void setName(String name){
                                m_dsc = name;
                        }
                }

 

        ---------------------------------------规范的代码----------------------------------------------

               

                public class Part {
                        String description;
                        void setDescription(String description) {
                                this.description = description;
                        }
                }

 

 

        7、避免思维映射

        不要让读你代码的人在脑中把你的名称翻译为他们熟知的名称,程序员通常都是聪明人,聪明人有时会接脑筋急转弯炫耀其聪明。假如你记得r代表代表不包含hostschemaurl的话,你真是太聪明了。总而言之,明确就是王道。

 

        8、类名

        类名和对象名应该是名词或名词短语,如CustomerAccountAddressParser,避免使用ManagerProcessorData或者Info这样的类名。类名不应当是动词。

 

        9、方法名

        1)方法名应当是动词或动词短语,如postPaymentdeletePagesave

        2)属性访问器,修改器应该根据其值命名,并依据JavaBean标准加上getsetis前缀。

        3)重载构造器时,使用描述了参数的静态工厂方法名通常好于直接用构造器。例如:

                Complex fulcrumPoint = Complex.fromRealNumber(23.0);

                Complex fulcrumPoint = new Complex(23.0);

        可以考虑将相应的构造器设置为private,强制使用这种命名手段。

 

        10、别卖萌

        如果名称太萌了,那就只有同代码编写者一般有幽默感的才记得住,而且还是他们记得那个笑话的时候才行。宁可明确,毋为好玩。言到意到,意到言到。例如:别用gotoHell()来表示kill()方法。

 

        11、每个概念对应一个词

        给每个抽象概念选一个词,并且一以贯之。例如,使用getfetchretrieve来给多个类中的同名方法命名。怎么记得住那个类中是哪个方法呢?函数名称应当独一无二,而且要保持一致,对于那些会用到你代码的程序员,一以贯之的命名法简直就是太幸运了。

 

        12、别用双关次

        同一术语用于不同概念,基本上就是双关语了。避免将同一单词用于不同目的。比如,在多个类中都有add方法,该方法通过增加或者连接两个现存值来获得新值。假设要写个新类,该类中有一个方法,把单个参数放到Collection中,该把整个方法叫做add吗?这样做貌似和其他add方法保持一致,但实际上语义却不同,应该用insertappend之类的次来命名才对。把该方法命名为add,就是双关语了。

        Codders应尽力写出易于理解的代码。尽力把代码写得让别人能一目尽览,而不必殚精竭虑地去研究。

 

        13、使用解决方案领域名称

        只有程序员才会读你的代码。所以,尽管用计算机科学方面的术语,算法名,模式名,数学术语吧。程序员要做太多技术性工作,给这些事取个技术性的名称,通常是最靠谱的做法。有哪个程序员不知道JobQueue的意思呢。

 

        14、使用源自业务领域的名称

        如果不能用熟悉的CSComputer Science)术语来给手头工作命名,就采用业务领域的名称。至少,负责维护代码的程序员可以请教做业务的。与业务领域更为贴近的代码,应当采用源自业务领域的名称。

 

        15、添加有意义的语境不要添加无用的语境

        只要段名称足够清楚,就要比长名称好。别给名称添加不必要的语境。例如,对于Address类的实体来说,AccountAddressCustomerAddress都是不错的名称,不过用在类名上就不太好了,Address是个好类名。如果需要与MAC地址,端口地址和WEB地址相区分,可考虑使用PostalAddressMACURL。这样的名称更为精确,而精确正式命名的要点。

 

分享到:
评论

相关推荐

    Java 编码规范-chm

    首先,命名规范是Java编码规范中的核心部分。变量名应该清晰、简洁且有意义,避免使用缩写,除非它们是业界广泛接受的标准。类名通常采用驼峰命名法,全大写字母表示常量。包名应全部小写,用点分隔各个部分。接口名...

    Java编码规范-细则

    ### Java编码规范-细则知识点详解 #### 一、概述 Java 编码规范是一套用于指导 Java 开发者编写高质量代码的标准。它旨在通过规范化代码风格来提高代码的可读性、可维护性和可靠性。本规范由总则和细则两部分组成,...

    Java编码规范-细则.pdf

    文件标题指出文档是关于Java编码规范的细则,通常这类文档会包含Java编程的格式化指南、命名约定、注释方式、代码结构设计等方面的规定。编码规范对于开发团队来说至关重要,它有助于保持代码的整洁、一致性和可维护...

    Java编码规范-细则[收集].pdf

    Java编码规范是软件开发中的重要指导原则,旨在提高代码的可读性、可维护性和团队协作效率。这份《Java编码规范-细则》是中兴通讯股份有限公司质企中心IT部制定的技术文件,版本为1.3,包含了从基础格式到高级设计...

    java编码规范、命名规范和优化规范

    为了确保代码的可读性、可维护性和团队协作效率,遵循一套统一的编码规范、命名规范和优化规范至关重要。以下是一些关键点的详细说明: 1. **前言**: 编码规范的目的是为了提高代码质量,减少因不规范的编程习惯...

    Java源代码编码规范-

    【Java源代码编码规范】 Java源代码编码规范是软件开发中的重要组成部分,它旨在提高代码的可读性、可维护性和一致性。规范的遵循能够帮助开发者更快地理解代码,减少错误,增强代码的健壮性。以下是规范的一些关键...

    Java编码规范.docx

    命名风格是 Java 编码规范的重要组成部分。Java 编码规范规定,代码中的命名不能以下划线或美元符号开始,也不能以下划线或美元符号结束。同时,代码中的命名也不能使用拼音与英文混合的方式,更不允许直接使用中文...

    java编码规范考试题答案.doc

    "java编码规范考试题答案" 一、Java编码规范考试题答案 本文档涵盖了Java编码规范的各种方面,包括集合类、线程、对称密码算法、异常处理、命名规范、随机数生成、压缩文件解压、安全编程规范、操作系统登录用户名...

    Java语言编码规范-1.01

    【Java语言编码规范-1.01】是一个指导程序员遵循的编程标准,旨在提高代码的可读性、可维护性和团队协作效率。编码规范的重要性主要体现在软件生命周期中的维护阶段,因为大多数时间都花在了维护上,且很少有软件由...

    华为JAVA编码规范.pdf

    华为JAVA编码规范.pdf 华为JAVA编码规范.pdf是华为公司编写的JAVA编程语言编码规范,旨在提供一个统一的编程风格和代码组织方式,以提高代码的可读性、维护性和可重用性。该规范涵盖了编程语言的基本结构、命名规则...

    java编码规范-《The Elements of Java Style》翻译本

    Java编程语言以其强大的功能、平台无关性和丰富的库而广受欢迎,但为了确保代码的可读性、可维护性和团队协作的高效性,遵循一套统一的编码规范至关重要。《The Elements of Java Style》是一本权威的Java编码风格...

    腾讯java编码规范

    腾讯 Java 编码规范 腾讯 Java 编码规范是腾讯集团管理标准的一部分,旨在确保公司项目代码的易维护性和编码安全性。该规范涵盖了 Java 编码风格、文件组织、代码风格、注释、命名、声明、异常、习惯等方面。 一、...

    java 编码规范文档

    ### Java编码规范文档知识点 #### 1. 概述 - **内容**:本文档主要涵盖了Java编程语言的编码规范,包括命名规则、注释规范、排版规范以及数据库相关的命名与格式化等内容。 - **编写目的**:制定一套统一的编码规范...

    Java编码规范.docJava编码规范.doc

    ### Java编码规范详解 #### 一、为什么要制定编码规范?...综上所述,Java编码规范不仅包括命名规则,还涵盖了代码排版、注释、程序结构等多个方面。遵循这些规范可以帮助开发人员编写出高质量、易于维护的代码。

    java编码规范(命名规范 代码检查)

    总之,遵循Java编码规范和代码检查实践,能有效提升代码质量,降低维护成本,增强团队间的协作效率。对于初学者来说,这些规范是良好编程习惯的起点;对于经验丰富的开发者,它们是保持代码整洁、专业和一致性的有力...

    JAVA编码规范.doc

    JAVA 编码规范是指导开发人员编写高质量、可读性...综上所述,JAVA编码规范是开发过程中不可或缺的一部分,它涵盖了从文件结构到代码细节的方方面面,旨在提升代码质量,确保团队合作的顺畅,同时降低长期维护的成本。

Global site tag (gtag.js) - Google Analytics