我来学Kotlin-起步之代码规范

Kotlin官方提供了一份代码规范,主要介绍了命名,冒号,匿名函数,类定义,方法与属性以及Unit,比较简短。 下面是Kotlin官方提倡的一份代码规范 命名 如果有不确定的可以参考Java代码规范,例如: 使用驼峰法来命名,避免使用下划线 类型/类使用大写字母开头 方法/属性/函数以小宝字母开头 使用4个空格缩进 public方法应该写上注释,以便生成文档的时候会显示注释内容 冒号 如果冒号出现在类型与类型之间,前后都应该有一个空格。而如果出现在变量名与其类型之间,前面不要空格,后面应该有一个空格: interface Foo<out T : Any> : Bar { fun foo(a: Int): T } 匿名函数/Lambdas 匿名函数在花括号内部两边应留一个空格,与前面调用的函数名之间留一个空格,剪头两边也需要有空格: list.filter { it > 10 }.map { element -> element * 2 } 匿名函数应该尽量简短,避免嵌套。推荐使用it代替自定义的参数名。在嵌套匿名函数里,最好显示的自定义参数名称。 类定义格式 如果类包含较少的参数,应该写在一行: class Person(id: Int, name: String) 如果比较长的话,构造函数的参数一个写一行,前面使用4个空格缩进,右圆括号另起一行。如果使用了继承,那么父类的构造函数或者接口应该写在括号后面: 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时,函数的返回值类型可以省略: ...

June 14, 2017

我来学Kotlin-起步之习惯用法

数据类 data class Customer(val name: String, val email: String) Customer提供了以下方法: getters,如果成员变量使用var定义那么还默认提供setters equals() hashCode() toString() copy() component1(), component2() … 这跟Scala的case class基本上差不多,一般在做数据交互/传输时用 函数默认值 fun foo(a: Int = 0, b: String = "") { ... } 列表过滤 val positives = list.filter { x -> x > 0 } 或者更短一点 val positives = list.filter { it > 0 } 默认使用it来接收单个的参数 字符串插值 println("Name $name") 对象检查 when (x) { is Foo -> ... is Bar -> ... else -> ... } 非常精简,再也不要写Java那个烦人的instanceof 遍历映射/列表 for ((k, v) in map) { println("$k -> $v") } k, v分别是map的key和value,是list的index和value ...

June 13, 2017

我来学Kotlin-起步之基础语法

零、咱们先来看看Kotlin是啥语言。 JetBrains在2016年2月15日Kotlin 1.0发布,这意味着Kotlin经过几年的发展已经稳定而且可以在生产环境使用。再来看一下其他人: 如何评价 Kotlin 语言 Android开发时你遇到过什么相见恨晚的工具或网站 Kotlin, the Swift of Android Using Project Kotlin for Android 使用Kotlin进行Android开发 在网搜索一下就会发现已经有很多人在研究Kotlin并且使用其来开发Android,Android Studio原生就内置了Kotlin的工具和插件,可以方便的使用Kotlin开发Android。个人认为Kotlin没有Java那么多的历史包袱,而且写起来也没有Java那么的繁琐,但是又可以跟Java无缝结合,可以完全使用现在的各种库;相比Scala又简单不少。应该在JVM平台上可以发展得不错。我来学系列记录我自己学习的过程,同时希望可以能跟猿猴们一起探讨开发。下面的内容基本上是照着官方的文档来写,一来自己学习,二来跟大家一起讨论。 一、快速浏览语法 包定义 这个跟Java没有多少区别,在文件的最上面定义包的名字。如果需要引用其他包的内容,紧接着包定义的下面引入: package my.demo import java.util.* // ... 在Kotlin里面包的名字不一定要跟文件路径一致,一个源代码文件可以定义任意的包名。 定义函数 跟Java不同的是,在Kotlin里面可以定义单独的函数,而Java的函数必须属于某个类。下面是一个求和函数,把两个Int类型的变量相加,返回相加后的结果: fun sum(a: Int, b: Int): Int { return a + b } 还可以使用表达式的方式和类型推导来把上面的代码写得更加简洁: fun sum(a: Int, b: Int) = a + b 函数可以返回一个代表无值的值Unit,这有点像Java里面的void,但是跟void的意思大不相同。Unit类型表示一个值,但是这个值里面什么都没有: fun printSum(a: Int, b: Int): Unit { println("sum of $a and $b is ${a + b}") } 如果函数没有返回值,返回值缺省就是Unit ...

March 12, 2016