1.建立DTOs(POJOs/POCOs)
<code>data </code><code>class</code> <code>Customer(val name: String, val email: String)</code>
建立一個Customer類需要提供下面功能:
getters 為所有的屬性提供getters(為var類型提供setters, val類型不可變,不需要提供)
equals()
hashcode()
toString()
copy()
component1(), component2(), …, for all properties (see Data classes)
2. 為函數提供預設參數
<code>fun foo(a: Int = </code><code>0</code><code>, b: String){</code>
<code> </code><code>println(</code><code>"a: ${a}, b: ${b}"</code><code>)</code>
<code>}</code>
3. 過濾一個清單
<code>var posi = lists.filter { a->a.startsWith(</code><code>'a'</code><code>) }</code>
或者更簡潔:
<code>posi = lists.filter { it.startsWith(</code><code>'a'</code><code>) }</code>
4. String插入
<code>println(</code><code>"Name $name"</code><code>)</code>
5. 示例檢查
<code>when (x) { </code>
<code> </code><code>is Foo -> ... </code>
<code> </code><code>is Bar -> ... </code>
<code> </code><code>else</code> <code>-> ...</code>
6. 列印map和或者list
<code>var maps = mapOf(</code><code>"a"</code> <code>to </code><code>1</code><code>, </code><code>"b"</code> <code>to </code><code>2</code><code>, </code><code>"c"</code> <code>to </code><code>3</code><code>)</code>
<code>for</code><code>((k,v) in maps){</code>
<code> </code><code>println(</code><code>"k: ${k}, v: ${v}"</code><code>)</code>
7. 使用'範圍'
<code>for</code><code>(i in </code><code>1</code><code>..</code><code>100</code><code>) {</code>
<code> </code><code>print(</code><code>"${i} "</code><code>)</code>
<code> </code>
<code>for</code><code>(i in </code><code>1</code> <code>until </code><code>10</code><code>) {</code>
<code>for</code><code>(x in </code><code>1</code><code>..</code><code>10</code> <code>step </code><code>2</code><code>) {</code>
<code>for</code><code>(x in </code><code>10</code> <code>downTo </code><code>1</code><code>) {</code>
<code> </code>
<code>var x = </code><code>3</code>
<code>if</code> <code>(x in </code><code>1</code><code>..</code><code>10</code><code>) {</code>
<code> </code><code>println(</code><code>"xxx in"</code><code>)</code>
8. 隻讀list(注意var和val差別)
<code>val list = listOf(</code><code>"a"</code><code>, </code><code>"b"</code><code>, </code><code>"c"</code><code>)</code>
9. 隻讀map
<code>val map = mapOf(</code><code>"a"</code> <code>to </code><code>1</code><code>, </code><code>"b"</code> <code>to </code><code>2</code><code>, </code><code>"c"</code> <code>to </code><code>3</code><code>)</code>
10. 通路map
<code>println(maps[</code><code>"b"</code><code>])</code>
11. 懶漢式屬性?
<code>val p: String by lazy { </code>
<code> </code><code>// compute the string</code>
12. 擴充功能(個人覺得比較強大,類似于注入?)
<code>fun String.testAddMethod(){</code>
<code> </code><code>println(</code><code>this</code><code>)</code>
<code>"abcd"</code><code>.testAddMethod()</code>
13. 單例
<code>object Resource {</code>
<code> </code><code>val name = </code><code>"name Resource"</code>
14. if != null的快速寫法
<code>val files = listOf(</code><code>"a"</code><code>, </code><code>"b"</code><code>, </code><code>"c"</code><code>)</code>
<code>println(files?.size)</code>
15. if else 快速寫法
<code>fun getNil():String?{</code>
<code> </code><code>return</code> <code>null</code>
<code>fun main(args: Array<String>) {</code>
<code> </code><code>var files = getNil()</code>
<code> </code><code>println(files?.length?: </code><code>"empty"</code><code>)</code>
16. 如果為null執行一段語句
<code>files?:println(</code><code>"is null"</code><code>)</code>
17. 如果不為null執行一段語句
<code>files?.let { println(</code><code>"not null"</code><code>) }</code>
18. 通過when語句傳回
<code>var string = </code><code>"b"</code>
<code>println(when(string) {</code>
<code> </code><code>"a"</code> <code>-></code><code>0</code>
<code> </code><code>"b"</code> <code>-></code><code>1</code>
<code> </code><code>else</code> <code>-> </code><code>100</code>
<code>})</code>
19. try/catch表達式
<code>fun test() { </code>
<code> </code><code>val result = </code><code>try</code> <code>{ </code>
<code> </code><code>count() </code>
<code> </code><code>} </code><code>catch</code> <code>(e: ArithmeticException) { </code>
<code> </code><code>throw</code> <code>IllegalStateException(e) </code>
<code>} </code><code>// Working with result}</code>
20. if表達式
<code>val a = </code><code>2</code>
<code>var result = </code><code>if</code><code>(a == </code><code>1</code><code>) {</code>
<code> </code><code>"one"</code>
<code>} </code><code>else</code> <code>if</code><code>(a == </code><code>2</code><code>) {</code>
<code> </code><code>"two"</code>
<code>}</code><code>else</code> <code>{</code>
<code> </code><code>"three"</code>
21. 使用構造者模式
<code>fun arrayMinusOnes(size: Int):IntArray {</code>
<code> </code><code>return</code> <code>IntArray(size).apply { fill(-</code><code>1</code><code>) }</code>
22. 單一表達式函數
<code>fun single(size: Int) = size * </code><code>10</code>
<code>相當于是:</code>
<code>fun single(size: Int): Int {</code>
<code> </code><code>return</code> <code>size * </code><code>4</code>
<code>這個可以和其他約定一起組合,産生更簡短的代碼,比如when表達式:</code>
<code>fun transfrom(color: Int):String = when (color) {</code>
<code> </code><code>1</code><code>-> </code><code>"red"</code>
<code> </code><code>2</code><code>-> </code><code>"blue"</code>
<code> </code><code>else</code><code>-> </code><code>"other color"</code>
23. 調用一個對象的多個方法使用with
省略了obj.xxx()
<code> </code><code>val kotlin = RunKotlin()</code>
<code> </code><code>with(kotlin) {</code>
<code> </code><code>penDown()</code>
<code> </code><code>println(</code><code>"zzz"</code><code>)</code>
<code> </code><code>forward(</code><code>2.0</code><code>)</code>
<code> </code><code>}</code>
<code>class</code> <code>RunKotlin {</code>
<code> </code><code>fun penDown(){println(</code><code>"penDown"</code><code>)}</code>
<code> </code><code>fun penUp(){println(</code><code>"penUp"</code><code>)}</code>
<code> </code><code>fun turn(degress: Double){println(degress)}</code>
<code> </code><code>fun forward(pixels: Double){println(pixels)}</code>
24. Java 7's try with resources
<code>val stream = Files.newInputStream(Paths.get(</code><code>"/some/file.txt"</code><code>))</code>
<code>stream.buffered().reader().use { </code>
<code> </code><code>reader -> println(reader.readText())</code>
25. Convenient form for a generic function that requires the generic type information
<code>/ </code><code>public</code> <code>final</code> <code>class</code> <code>Gson {</code>
<code>// ...</code>
<code>// public <T> T fromJson(JsonElement json, Class<T> classOfT) throws JsonSyntaxException {</code>
<code>inline fun <reified T: Any> Gson.fromJson(json): T = </code><code>this</code><code>.fromJson(json, T::</code><code>class</code><code>.java)</code>
26. 構造可能為null的布爾值
<code>val b: Boolean? = ...</code>
<code>if</code> <code>(b == </code><code>true</code><code>) { </code>
<code> </code><code>...</code>
<code>} </code><code>else</code> <code>{ </code>
<code> </code><code>// `b` is false or null</code>
本文轉自rongwei84n 51CTO部落格,原文連結:http://blog.51cto.com/483181/1931893,如需轉載請自行聯系原作者