[kotlin系列] (s1_1) 代码风格、编码规范

kotlin 代码风格、编码规范

写在前面

很久没有CSDN写过博客了,甚是怀念。多话不说,随着Google I/O大会上将kotlin指定为官方语言,kotlin大热的趋势势不可挡,kotlin并不是一个刚出的语言了,没记错是2011年面世的吧。这几个月下来,伴随着一些社区的贡献,关于kotlin的学习资料也越来越多,本系列大多都会是转载,或者加一定的修改or备注,本来是想丢到git上组内共享,实际上也没什么稀奇的,也怕麻烦,直接写在这里算了。

工欲善其事必先利其器

我并不太赞成初学一门语言的时候,就要用最简单的编辑器,命令行编译运行。实际上这会大大的降低效率,另外,想要记住语法不会被语法帮助影响,换句话说,你要是不用心记语法,就算一天到晚用sublinetext手敲也不会有任何帮助。

我现在开发、学习都迁移到macOS了,windows的环境就不再关注了。

首先你需要配置一套编译环境

使用命令行编译参考

推荐使用IntelliJ IDEA,哪怕是最终为了Android(毕竟Android还没有用kotlin改写呢,学语法就没必要使用Android studio)
使用IntelliJ IDEA参考

代码风格、编码规范

主要参考自这里

命名风格

绝大多数情况下使用驼峰法命名(并避免命名含有下划线)
类:大驼峰法
类的成员变量、成员方法:小驼峰法

常量:匈牙利法

缩进

4 个空格缩进

冒号左右空格

类型和超类型之间的冒号前要有一个空格,而实例和类型之间的冒号前不要有空格:

interface Foo<out T : Any> : Bar {
    fun foo(a: Int): T
}

Lambda表达式

在lambda表达式中, 大括号左右要加空格,分隔参数与代码体的箭头左右也要加空格 。lambda表达应尽可能不要写在圆括号中

list.filter { it > 10 }.map { element -> element * 2 }

在非嵌套的短lambda表达式中,最好使用约定俗成的默认参数 it 来替代显式声明参数名 。在嵌套的有参数的lambda表达式中,参数应该总是显式声明。

类头格式化

有少数几个参数的类可以写成一行:

class Person(id: Int, name: String)

具有较长类头的类应该格式化,以使每个主构造函数参数位于带有缩进的单独一行中。 此外,右括号应该另起一行。如果我们使用继承,那么超类构造函数调用或者实现接口列表应位于与括号相同的行上:

class Person(
    id: Int, 
    name: String,
    surname: String
) : Human(id, name) {
    // ……
}

对于多个接口,应首先放置超类构造函数调用,然后每个接口应位于不同的行中:

class Person(
    id: Int, 
    name: String,
    surname: String
) : Human(id, name),
    KotlinMaker {
    // ……
}

构造函数参数可以使用常规缩进或连续缩进(双倍的常规缩进)。

Unit

如果函数返回 Unit 类型,该返回类型应该省略:

fun foo() { // 省略了 ": Unit"

}

函数还是属性

很多场合无参的函数可与只读属性互换。 尽管语义相近,也有一些取舍的风格约定。
底层算法优先使用属性而不是函数:

  • 不会抛异常
  • O(1) 复杂度
  • 计算廉价(或缓存第一次运行)
  • 不同调用返回相同结果

注释

  • 行注释 //内容
  • 块注释 /*内容*/
  • doc类注释 /**内容*/

一般来说,代码一行会选择80或100或120,然后传统行注释会放在右侧的注释区,但整理对齐会花费不少功夫,有些IDE的设置可能会让你抓狂。其实这样大家也是能接受的:

fun foo() {
    // find the rootView instance.
    View rootView = findViewById(R.id.root);

    // find the submit button instance.
    Button btnSubmit = (Button) findViewById(R.id.btn_submit);
}

一般来说会加空行来减少阅读障碍

对控制段的注释:
一般我们希望这样:

if (expression) { // 控制段含义
    println("balabala")
} else {
    、、、
}

但有时这段注释会比较长,可以这样:

if (expression) {
    // 控制段含义,要干的事情、算法解释,很长很长很长,后面留一个空行避免认为是下一句代码的注释

    println("balabala")
} else {
    、、、
}

当然,多行注释推荐使用块注释

对于方法(尤其是公开的)、重要属性,应当使用doc注释
对于属性,一般缩为一行:

/**这个重要的变量是干嘛的*/
var mSettingSharePref: SharedPreference

对方法:
包含方法描述,参数解释,返回解释,甚至版本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值