# 代码范例
这里列出一些 Kotlin 中会经常用到的代码。如果你也有,可以通过在 [Github](https://github.com/JetBrains/kotlin-web-site) 上 pull 的方式分享出来。
### 创建 DTO (POJO/POCO)
``` kotlin
data class Customer(val name: String, val email: String)
```
提供了具有下列功能的 `Customer` 类:
* 所有属性的 getter (使用 `var` 的话也会有 setter)
* `equals()`
* `hashCode()`
* `toString()`
* `copy()`
* 所有属性的 `component1()`, `component2()`, ... ( [数据类](data-classes.html))
### 函数参数的默认值
``` kotlin
fun foo(a: Int = 0, b: String = "") { ... }
```
### 过滤 list
``` kotlin
val positives = list.filter { x -> x > 0 }
```
或者可以更精炼一点:
``` kotlin
val positives = list.filter { it > 0 }
```
### 字符串插入
``` kotlin
println("Name $name")
```
### 实例检查
``` kotlin
when (x) {
is Foo -> ...
is Bar -> ...
else -> ...
}
```
### 遍历 map/list
``` kotlin
for ((k, v) in map) {
println("$k -> $v")
}
```
`k`、 `v` 可以是任何类型
### 使用范围
``` kotlin
for (i in 1..100) { ... }
for (x in 2..10) { ... }
```
### 只读的 list
``` kotlin
val list = listOf("a", "b", "c")
```
### 只读的 map
``` kotlin
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
```
### 访问 map
``` kotlin
println(map["key"])
map["key"] = value
```
### 延迟属性
``` kotlin
val p: String by lazy {
// 操作这个 String
}
```
### 扩展函数
``` kotlin
fun String.spaceToCamelCase() { ... }
"Convert this to camelcase".spaceToCamelCase()
```
### 创建单例
``` kotlin
object Resource {
val name = "Name"
}
```
### If not null 简写
``` kotlin
val files = File("Test").listFiles()
println(files?.size)
```
### If not null 和 else 简写
``` kotlin
val files = File("Test").listFiles()
println(files?.size ?: "empty")
```
### if null 则执行某个指令
``` kotlin
val data = ...
val email = data["email"] ?: throw IllegalStateException("Email is missing!")
```
### if not null 则执行
``` kotlin
val data = ...
data?.let {
... // if not null 则执行这个块
}
```
### 返回 when 指令
``` kotlin
fun transform(color: String): Int {
return when (color) {
"Red" -> 0
"Green" -> 1
"Blue" -> 2
else -> throw IllegalArgumentException("Invalid color param value")
}
}
```
### 'try/catch' 表达式
``` kotlin
fun test() {
val result = try {
count()
} catch (e: ArithmeticException) {
throw IllegalStateException(e)
}
// Working with result
}
```
### 'if' 表达式
``` kotlin
fun foo(param: Int) {
val result = if (param == 1) {
"one"
} else if (param == 2) {
"two"
} else {
"three"
}
}
```
### 构建器风格的方法编写中返回 `Unit`
``` kotlin
fun arrayOfMinusOnes(size: Int): IntArray {
return IntArray(size).apply { fill(-1) }
}
```
### 单表达式函数
``` kotlin
fun theAnswer() = 42
```
这个等同于
``` kotlin
fun theAnswer(): Int {
return 42
}
```
还可以结合其它的形式得到更简练的代码。例如与 `when` 表达式一起:
``` kotlin
fun transform(color: String): Int = when (color) {
"Red" -> 0
"Green" -> 1
"Blue" -> 2
else -> throw IllegalArgumentException("Invalid color param value")
}
```
### 在一个对象上调用多个方法(`with`)
### Calling multiple methods on an object instance ('with')
``` kotlin
class Turtle {
fun penDown()
fun penUp()
fun turn(degrees: Double)
fun forward(pixels: Double)
}
val myTurtle = Turtle()
with(myTurtle) { //draw a 100 pix square
penDown()
for(i in 1..4) {
forward(100.0)
turn(90.0)
}
penUp()
}
```
### Java 7 的 try with 资源
``` kotlin
val stream = Files.newInputStream(Paths.get("/some/file.txt"))
stream.buffered().reader().use { reader ->
println(reader.readText())
}
```