本文共 3558 字,大约阅读时间需要 11 分钟。
语言风格
这里整理了 kotlin 惯用的代码风格,如果你有喜爱的代码风格,可以在 github 上给 提 pull request 。
创建DTOs(POJSs/POCOs) 文件:
data class Customer(val name: String, val email: String)
上述代码提供了一个包含以下功能的 Customer 类:
equals()
hashCode()
toString()
copy()
component1()
, component2()
, …, 等等 (请查看 )
函数参数默认值:
fun foo(a: Int = 0, b: String = "") { ... }
过滤一个 List:
val positives = list.filter { x -> x > 0 }
还可以更简洁:
val positives = list.filter { it > 0 }
$ 操作符给字符串中插入变量 :
println("Name $name")
类型实例检查:
1 when (x) {2 is Foo -> ...3 is Bar -> ...4 else -> ...5 }
Map/List 的名值对遍历:
1 for ((k, v) in map) {2 println("$k -> $v")3 }
k, v 的命名可以是任何字符
使用 Ranges(区间):
1 for (i in 1..100) { ... } // 闭区间: 包含 1002 for (i in 1 until 100) { ... } // 半开区间: 不包含 1003 for (x in 2..10 step 2) { ... } // x自增24 for (x in 10 downTo 1) { ... } // 倒序遍历5 if (x in 1..10) { ... } // x是否在区间
只读List:
val list = listOf("a", "b", "c")
只读Map:
1 val map = mapOf("a" to 1, "b" to 2, "c" to 3)
访问Map:
1 println(map["key"])2 map["key"] = value
lazy属性:
1 val p: String by lazy {2 // compute the string3 }
函数扩展:
1 fun String.spaceToCamelCase() { ... }2 3 "Convert this to camelcase".spaceToCamelCase()
创建单例:
1 object Resource {2 val name = "Name"3 }
if 判空(null)的快捷方式:
1 val files = File("Test").listFiles()2 3 println(files?.size)
有else:
1 val files = File("Test").listFiles()2 3 println(files?.size ?: "empty")
如果为空则执行语句:
1 val data = ...2 val email = data["email"] ?: throw IllegalStateException("Email is missing!")
为空则执行操作:
1 val data = ...2 3 data?.let {4 ... // execute this block if not null5 }
在when语句里返回:
1 fun transform(color: String): Int {2 return when (color) {3 "Red" -> 04 "Green" -> 15 "Blue" -> 26 else -> throw IllegalArgumentException("Invalid color param value")7 }8 }
try/catch:
1 fun test() {2 val result = try {3 count()4 } catch (e: ArithmeticException) {5 throw IllegalStateException(e)6 }7 8 // Working with result9 }
IF:
1 fun foo(param: Int) {2 val result = if (param == 1) {3 "one"4 } else if (param == 2) {5 "two"6 } else {7 "three"8 }9 }
生成器模式写法返回 Unit :
1 fun arrayOfMinusOnes(size: Int): IntArray {2 return IntArray(size).apply { fill(-1) }3 }
单行表达式:
fun theAnswer() = 42
相当于:
1 fun theAnswer(): Int {2 return 423 }
可以高效地与其他语法配合,是代码更简洁,如下面的 when :
1 fun transform(color: String): Int = when (color) {2 "Red" -> 03 "Green" -> 14 "Blue" -> 25 else -> throw IllegalArgumentException("Invalid color param value")6 }
使用 With 语句可以调用一个对象里的多个方法:
1 class Turtle { 2 fun penDown() 3 fun penUp() 4 fun turn(degrees: Double) 5 fun forward(pixels: Double) 6 } 7 8 val myTurtle = Turtle() 9 with(myTurtle) { //draw a 100 pix square10 penDown()11 for(i in 1..4) {12 forward(100.0)13 turn(90.0)14 }15 penUp()16 }
支持Java 7 的文件操作方式:
1 val stream = Files.newInputStream(Paths.get("/some/file.txt"))2 stream.buffered().reader().use { reader ->3 println(reader.readText())4 }
为声明需要泛型信息的泛型方法提供更为方便的格式:
1 // public final class Gson {2 // ...3 // publicT fromJson(JsonElement json, Class classOfT) throws JsonSyntaxException {4 // ...5 6 inline fun Gson.fromJson(json): T = this.fromJson(json, T::class.java)
Boolean 值可以是null:
1 val b: Boolean? = ...2 if (b == true) {3 ...4 } else {5 // `b` is false or null6 }
转载请注明原文地址:http://www.cnblogs.com/joejs/p/6878128.html