[关闭]
@946898963 2020-07-09T08:16:03.000000Z 字数 2441 阅读 900

条条小小kotlin编码规范

Kotlin


文件名

文件名命名遵守大驼峰规则(首字母大写)

        如果一个文件中仅包含一个class, 那么则应该以该类的名称来命名文件

  1. // Main.KT
  2. class Main {
  3. fun print() {
  4. println("Hello World.")
  5. }
  6. }

        如果一个文件中包含多个top-level declarations(顶级的类/方法/变量/常量等), 则可以选一个合适名字命名

  1. // ServiceInfo.KT
  2. data class AreaInfo(
  3. val areaImg: String,
  4. val areaTotal: Int)
  5. data class AvgPrice(
  6. val title: String,
  7. val amount: String,
  8. val unit: String)
  9. data class ServiceInfo(
  10. // 服务区域
  11. val serviceAreaInfo: AreaInfo?,
  12. // 服务报价
  13. val serviceAvgPrice: AvgPrice?)

文件结构

一个文件可以包含多个top-level declarations, 但是需要尽可能的保证以下几点:

类名与方法名

同Java中的写法, 类名命名遵守大驼峰规则(首字母大写), 方法名命名遵守小驼峰规则(首字母小写)

  1. class Main {
  2. fun print() {
  3. println("Hello World.")
  4. }
  5. }

字段名

  1. lass Person {
  2. val mName: String = "石硕"
  3. val mHeight: Int = 190
  4. fun print() {
  5. println(TEXT_PRINT)
  6. }
  7. companion object {
  8. const val TEXT_PRINT = "Hello World."
  9. }
  10. }

常量

  1. class Person {
  2. val sex: Int = Sex.MAN
  3. val height: Int = 190
  4. val name: String = "石硕"
  5. val country: String = CHINA
  6. fun print() {
  7. println(TEXT_PRINT)
  8. }
  9. companion object {
  10. const val TEXT_PRINT = "Hello World."
  11. // 定义在companion object中
  12. const val CHINA = "china"
  13. const val OTHER = "other"
  14. }
  15. object Sex {
  16. // 定义在自定义的Object中
  17. const val MAN = 0
  18. const val WOMAN = 1
  19. }
  20. }
  1. // Kotlin
  2. class TestConst {
  3. companion object {
  4. const val TEXT = "Text."
  5. val TEXT_WITHOUT_CONST = "Text without Const."
  6. @JvmField
  7. val TEXT_WITH_JVM_FIELD = "Text without Const but with JvmField"
  8. @JvmStatic
  9. val TEXT_WITH_JVM_STATIC = "Text without Const but with JvmStatic"
  10. }
  11. }
  12. // Java
  13. class JAVATest {
  14. public static void main(String[] args) {
  15. // 调用Const常量
  16. System.out.println(TestConst.TEXT);
  17. // 调用非Const常量
  18. System.out.println(TestConst.Companion.getTEXT_WITHOUT_CONST());
  19. // 调用非Const但是用@JvmStatic修饰的常量(两种调用方式都可以)
  20. System.out.println(TestConst.getTEXT_WITH_JVM_STATIC());
  21. System.out.println(TestConst.Companion.getTEXT_WITH_JVM_STATIC());
  22. // 调用非Const但是用@JvmField修饰的常量
  23. System.out.println(TestConst.TEXT_WITH_JVM_FIELD);
  24. }
  25. }

作用域函数的使用(let, also, run, apply, with)

正确
此处输入图片的描述

错误
此处输入图片的描述

匿名函数的嵌套调用可能会引发编译问题, 所以应尽量避免嵌套调用

  1. class Foo {
  2. fun bar(obj: Any) {
  3. val v = V()
  4. obj.let {
  5. // 这样有问题
  6. v.methodA(null) {
  7. v.methodB(null) {
  8. }
  9. }
  10. // 这样没问题
  11. v.methodA(null) {}
  12. v.methodB(null) {}
  13. }
  14. }
  15. private class V {
  16. fun methodA(s: String?, callback: (Boolean) -> Unit) {
  17. }
  18. fun methodB(s: String?, callback: (Boolean) -> Unit) {
  19. }
  20. }
  21. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注