博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kotlin 语言入门指南(二)--代码风格
阅读量:6082 次
发布时间:2019-06-20

本文共 3558 字,大约阅读时间需要 11 分钟。

 

 

语言风格

这里整理了 kotlin 惯用的代码风格,如果你有喜爱的代码风格,可以在 github 上给  提 pull request 。

 

创建DTOs(POJSs/POCOs) 文件

data class Customer(val name: String, val email: String)

上述代码提供了一个包含以下功能的 Customer 类:

  • getters (and setters in case of vars) for all properties
  • 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 //     public 
T 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

你可能感兴趣的文章
vim学习与理解
查看>>
DIRECTSHOW在VS2005中PVOID64问题和配置问题
查看>>
MapReduce的模式,算法以及用例
查看>>
《Advanced Linux Programming》读书笔记(1)
查看>>
zabbix agent item
查看>>
一步一步学习SignalR进行实时通信_7_非代理
查看>>
AOL重组为两大业务部门 全球裁员500人
查看>>
字符设备与块设备的区别
查看>>
为什么我弃用GNOME转向KDE(2)
查看>>
Redis学习记录初篇
查看>>
爬虫案例若干-爬取CSDN博文,糗事百科段子以及淘宝的图片
查看>>
Web实时通信技术
查看>>
第三章 计算机及服务器硬件组成结合企业运维场景 总结
查看>>
IntelliJ IDEA解决Tomcal启动报错
查看>>
默认虚拟主机设置
查看>>
php中的短标签 太坑人了
查看>>
[译] 可维护的 ETL:使管道更容易支持和扩展的技巧
查看>>
### 继承 ###
查看>>
数组扩展方法之求和
查看>>
astah-professional-7_2_0安装
查看>>