关于命名
开发过程中的命名无处不在:变量,函数,参数,类和包
命名技巧
-
名副其实
选个好名字要花时间,但省下来的时间比花掉的多。
//比较两组变量
//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章。
网友评论