美文网首页
有意义的命名

有意义的命名

作者: JimHan_ | 来源:发表于2019-07-19 17:55 被阅读0次

    关于命名

    开发过程中的命名无处不在:变量,函数,参数,类和包

    命名技巧

    • 名副其实

    选个好名字要花时间,但省下来的时间比花掉的多。

        //比较两组变量
        //1.
        var d: Int? = null//消逝的时间,以日记
    
        //2.    
        var elapsedTimeInDays: Int? = null
        var daysSinceCreation: Int? = null
        var daysSinceModification: Int? = null
        var fileAgeInDays: Int? = null
    
        //比较三组方法
        //1.
        fun getThem(): MutableList<IntArray> {
            val list1 = mutableListOf<IntArray>()
            for (x in theList) {
                if (x[0] == 4) {
                    list1.add(x)
                }
            }
            return list1
        }
    
        //2.
        fun getFlaggedCells(): MutableList<IntArray> {
            val flaggedCells = mutableListOf<IntArray>()
            for (cell in gameBoard) {
                if (cell[STATUS_VALUE] == FLAGGED) {
                    flaggedCells.add(cell)
                }
            }
            return flaggedCells
        }
    
       //3.
       fun getFlaggedCells(): MutableList<Cell> {
            val flaggedCells = mutableListOf<Cell>()
            for (cell in gameBoard) {
                if (cell.isFlagged()) {
                    flaggedCells.add(cell)
                }
            }
            return flaggedCells
        }
    
    • 避免误导

    避免使用与本意相悖的词。

        //list有特殊含义,不是list避免使用xxxList的命名,可使用下面的例子代替
        var accountList = null
    
        var accountGroup = null
        var bunchOfAccounts = null
        var accounts = null
    

    提防使用不同之处较小的名称

        class XYZControllerForEfficientHandlingOfStrings {}
        class XYZControllerForEfficientStrorageOfStrings {}
    
    • 做有意义的区分

    数字系列命名(a1, a2, ..., aN)。

        //比较两组方法中的参数
        //1.
        fun copyChars(a1: CharArray, a2: CharArray) {
            val copySize = Math.max(a1.size, a2.size)
            for (i in 0 until copySize) {
                a2[i] = a1[i]
            }
        }
        //2.
        fun copyChars(source: CharArray, destination: CharArray) {
            val copySize = Math.min(source.size, destination.size)
            for (i in 0 until copySize) {
                destination[i] = source[i]
            }
        }
    

    不说废话

        //三组中的类名,方法名,变量名没有实际意义上的区分
        class Product {}
        class ProductInfo {}
        class ProductData {}
    
        fun getActiveAccount() {}
        fun getActiveAccounts() {}
        fun getActiveAccountInfo() {}
    
        var customerInfo = null
        var customer = null
        var accountData = null
        var account = null
        var theMessage = null
        var message = null
    
    • 使用可搜索的名称

    单字母名称和数字常量很难在一大篇文字中找出来。

            //1.
            var s = 0.0
            var t: IntArray = intArrayOf(1, 2, 3, 4, 3, 2)
            for (j in 0 until t.size) {
                s += (t[j] * 4) / 5
            }
          
            //2.
            var scoreSumOfEachPerson = 0.0
            val scorePerTask = 4
            val numberOfPeopleInTeam = 5
            var taskArray: IntArray = intArrayOf(1, 2, 3, 4, 3, 2)
            for (j in 0 until taskArray.size) {
                scoreSumOfEachPerson += (taskArray[j] * scorePerTask) / numberOfPeopleInTeam
            }
    
    
    • 类名和方法名

    类名应该是名词或名词短语,如Customer, WikiPage, Account, AddressParser;方法名应该是动词或动词短语,如postPayment, deletePage, save。

    • 有意义的语境

    给变量添加语境。

        //放在一起时,可以清楚是硬件设备信息,但如果分开,就比较难判别
        var deviceNO = ""
        var deviceID = ""
        var heartrate = ""
        var power = ""
        var rssi = ""   
        
        //添加前缀区分
        var miracastDeviceNO = ""
        var miracastDeviceID = ""
        var miracastHeartrate = ""
        var miracastPower = ""
        var miracastRssi = ""   
    
        //包装实体类区分
        class MiracastDeviceInfo {
                var deviceNO = ""
                var deviceID = ""
                var heartrate = ""
                var power = ""
                var rssi = ""   
        }
    

    不要添加没用的语境。

    //投屏项目中,出现Miracast是没有意义的,没有必要添加Miracast前缀
    class MiracastDeviceInfo
    

    总结

    有意义的命名,是明确代码含义,增加代码可读性的基础。

    本文部分内容摘自<<代码整洁之道>>第2章。

    相关文章

      网友评论

          本文标题:有意义的命名

          本文链接:https://www.haomeiwen.com/subject/oegslctx.html