Kotlin基础编码规范
源代码组织
目录结构
在纯 Kotlin 项目中,推荐的目录结构遵循省略了公共根包的包结构。例如,如果项目中的所有代码都位于 org.example.kotlin 包及其子包中,那么 org.example.kotlin 包的文件应该直接放在源代码根目录下,而 org.example.kotlin.network.socket 中的文件应该放在源代码根目录下的 network/socket 子目录中。
对于 JVM 平台:Kotlin 源文件应当与 Java 源文件位于同一源文件根目录下, 并遵循相同的目录结构(每个文件应存储在与其 package 语句对应的目录中。
源文件名称
如果 Kotlin 文件包含单个类(以及可能相关的顶层声明),那么文件名应该与该类的名称相同,并追加 .kt 扩展名。如果文件包含多个类或只包含顶层声明, 那么选择一个描述该文件所包含内容的名称,并以此命名该文件。 使用首字母大写的驼峰风格(例如 ProcessDeclarations.kt)。
文件的名称应该描述文件中代码的作用。因此,应避免在文件名中使用诸如“Util”之类的无意义词语。
源文件组织
鼓励多个声明(类、顶级函数或者属性)放在同一个 Kotlin 源文件中, 只要这些声明在语义上彼此紧密关联并且文件保持合理大小 (不超过几百行)。
特别是在为类定义与类的所有客户都相关的扩展函数时, 请将它们放在与类自身定义相同的地方。而在定义仅对指定客户有意义的扩展函数时,请将它们放在紧挨该客户代码之后。不要只是为了保存 “Foo 的所有扩展函数”而创建文件。
类布局
通常,一个类的内容按以下顺序排列:
属性声明与初始化块
次构造函数
方法声明
伴生对象
不要按字母顺序或者可见性对方法声明排序,也不要将常规方法与扩展方法分开。而是要把相关的东西放在一起,这样从上到下阅读类的人就能够跟进所发生事情的逻辑。选择一个顺序(高级别优先,或者相反)并坚持下去。
将嵌套类放在紧挨使用这些类的代码之后。如果打算在外部使用嵌套类,而且类中并没有引用这些类,那么把它们放到末尾,在伴生对象之后。
接口实现布局
在实现一个接口时,实现成员的顺序应该与该接口的成员顺序相同(如果需要, 还要插入用于实现的额外的私有方法)
重载布局
在类中总是将重载放在一起。
命名规则
在 Kotlin 中,包名与类名的命名规则非常简单:
包的名称总是小写且不使用下划线(org.example.project)。 通常不鼓励使用多个词的名称,但是如果确实需要使用多个词,可以将它们连接在一起或使用驼峰风格(org.example.myProject)。
类与对象的名称以大写字母开头并使用驼峰风格:
open class DeclarationProcessor { /*……*/ }
object EmptyDeclarationProcessor : DeclarationProcessor() { /*……*/ }
函数名
函数、属性与局部变量的名称以小写字母开头、使用驼峰风格而不使用下划线:
fun processDeclarations() { /*……*/ }
var declarationCount = 1
例外:用于创建类实例的工厂函数可以与要创建的类具有相同的名称:
abstract class Foo { /*……*/ }
class FooImpl : Foo { /*……*/ }
fun FooImpl(): Foo { return FooImpl() }
测试方法的名称
**当且仅当**在测试中,可以使用反引号括起来的带空格的方法名。 (请注意,Android 运行时目前不支持这样的方法名。)测试代码中也允许方法名使用下划线。
class MyTestCase {
@Test fun `ensure everything works`() { /*...*/ }
@Test fun ensureEverythingWorks_onAndroid() { /*...*/ }
}
属性名
常量名称(标有 const 的属性,或者保存不可变数据的没有自定义 get 函数的顶层/对象 val 属性)应该使用大写、下划线分隔的名称:
const val MAX_COUNT = 8
val USER_NAME_FIELD = "UserName"
保存带有行为的对象或者可变数据的顶层/对象属性的名称应该使用驼峰风格名称:
val mutableCollection: MutableSet<String> = HashSet()
保存单例对象引用的属性的名称可以使用与 object 声明相同的命名风格:
val PersonComparator: Comparator<Person> = /*...*/
对于枚举常量,可以使用大写、下划线分隔的名称 (enum class Color { RED, GREEN })也可使用首字母大写的常规驼峰名称,具体取决于用途。
幕后属性的名称
如果一个类有两个概念上相同的属性,一个是公共 API 的一部分,另一个是实现细节,那么使用下划线作为私有属性名称的前缀:
class C {
private val _elementList = mutableListOf<Element>()
val elementList: List<Element>
get() = _elementList
}
选择好名称
类的名称通常是用来解释类*是*什么的名词或者名词短语:List、 PersonReader。
方法的名称通常是动词或动词短语,说明该方法*做*什么:close、 readPersons。 修改对象或者返回一个新对象的名称也应遵循建议。例如 sort 是对一个集合就地排序,而 sorted 是返回一个排序后的集合副本。文章来源:https://www.toymoban.com/news/detail-527497.html
名称应该表明实体的目的是什么,所以最好避免在名称中使用无意义的单词 (Manage文章来源地址https://www.toymoban.com/news/detail-527497.html
到了这里,关于kotlin 基础编码规范的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!