Kotlin学习(3):习惯用法
- 開發(fā)環(huán)境:IntelliJ IEDA
- 個人博客:http://blog.csdn.net/IInmy
- 項(xiàng)目源碼:https://github.com/Rushro2m/KotlinForOfficial
- 官方文檔中文版:https://www.kotlincn.net/docs/reference/idioms.html
1、數(shù)據(jù)類
(1)創(chuàng)建數(shù)據(jù)類
data class Custom(val name:String,val email:String)(2)系統(tǒng)自動提供的功能
- 所有屬性的getters(對于val定義還有setters)
- equals()
- hashCode()
- toString()
- copy()
- 所有屬性的component1()、component2()
2、函數(shù)默認(rèn)參數(shù)
一般情況下如果函數(shù)的參數(shù)都有默認(rèn)值
//下面兩種方法的效果是等同的 fun foo(x: Int = 0, y: String = "") {println("$x is $y") }fun fzz(x: Int, y: String) {println("$x is $y") }fun main(args: Array<String>) {foo(3, "three")fzz(4, "four") }3、list的過濾
一般情況下,集合使用filter方法對數(shù)據(jù)進(jìn)行過濾。
val list = listOf(1, 3, 4, 5, 6, 7, 8, 9, 10)//兩種實(shí)現(xiàn)方式是等同的 val positives = list.filter { x -> x > 5 } val positives2 = list.filter { it > 5 }fun main(args: Array<String>) {println(positives.forEach { print(it) })println(positives2.forEach { print(it) })4、String內(nèi)插
String內(nèi)插,就是將變量插入到String字符串中,通過 $ 符號將變量插入。
fun person(name: String, age: Int) {println("name-->$name,age-->$age") }fun main(args: Array<String>) {person("張三", 24) }5、類型判斷
對變量的類型進(jìn)行判斷,通過字符 is,判斷其是否為某種類型。
fun type(x: Any) {when (x) {is Number -> println("$x is Number")is String -> println("$x is String")else -> println("don't know type")} }fun main(args: Array<String>) {type(3)type("Hello")type('c') }6、遍歷map型list
map型的集合是有key-value對應(yīng)值的,通過for循環(huán)對其遍歷輸出。
fun print(x: HashMap<String, String>) {for ((k, v) in x) {println("key -->$k,value-->$v")} }fun main(args: Array<String>) {val items = hashMapOf("a" to "apple", "b" to "banana", "o" to "orange")print(items) }7、區(qū)間
區(qū)間的判斷,一般使用 in 對數(shù)據(jù)進(jìn)行判斷, 判斷其是否在某個區(qū)間內(nèi)。
一般來說,區(qū)間的范圍,有幾種表現(xiàn)形式:
- x..y :x到y(tǒng)之間
- x until y:x到y(tǒng)之間(左閉右開,不包含y)
- x..y step z:x到y(tǒng)之間,只算z的整數(shù)倍
- x downTo y:一般來說,此種情況下,都是x>y,x遞減至y之間的數(shù)
8、訪問map
(1)訪問key值
- 通過map.keys訪問所有的key值
(2)訪問value值
- 通過map.values訪問所有的value值
- 通過map[key]訪問特定的value值
9、擴(kuò)展函數(shù)
在函數(shù)的基礎(chǔ)上,對其進(jìn)行擴(kuò)展,增加自己想要的功能。比如擴(kuò)展這樣一個功能:對任意的對象轉(zhuǎn)換為字符串功能。
fun Any?.changeToString(): String {return if (this == null) "null"else return toString() }fun main(args: Array<String>) {var name = 'c'var age = 22println(name.changeToString())println(age.changeToString()) }10、縮寫
(1)If not null 縮寫
對象和調(diào)用的方法之間添加 ?,就是對其進(jìn)行不為空判斷。
val files = File("Test").listFiles() println(files?.size)(2)If not null and else縮寫
在判斷完之后添加 :,就是else的內(nèi)容。
val files = File("Test").listFiles() println(files?.size ?: "沒有此文件")(3)If null 執(zhí)行一個語句
通過 ?:,后面為null之后所執(zhí)行的語句
val values = mapOf("a" to "apple", "e" to "email") val email = values["email"] ?: throw IllegalAccessException("Email is Missing") println(email)(4)If not null 執(zhí)行代碼
通過 ?.let{},如果為null就行l(wèi)et{ }里面的代碼
val value = "163.com" value?.let {println("已經(jīng)查找到Email,地址為:" + it) }11、返回when表達(dá)式
通過return when(){},通過不同條件返回不同結(jié)果。
fun transform(color: String): Int {return when (color) {"RED" -> 0"GREEN" -> 2"BLUE" -> 3else -> throw IllegalAccessException("no have this color")} }fun main(args: Array<String>) {println(transform("GREEN")) }12、tyr/catch表達(dá)式
try-catch拋異常執(zhí)行相應(yīng)操作。
fun test(age: Int): Any? {val result = try {age < 10} catch (e: ArithmeticException) {throw IllegalAccessException(e.toString())}return result }fun main(args: Array<String>) {println(test(10)) }13、“if”表達(dá)式
通過對不同條件的判斷,輸出不同的結(jié)果。
fun foo(param: Int) {if (param == 1) {println("one")} else if (param == 2) {println("two")} else {println("three")} }fun main(args: Array<String>) {foo(2) }14、單表達(dá)式
如果一個函數(shù)的返回結(jié)果很簡單,也可以直接寫成單表達(dá)式。
同時,單表達(dá)式函數(shù)與其他慣用法一起使用,簡化代碼,例如和when一起使用。
//兩種方式是等同的 fun theAnswer() = 42fun theAnswer2(): Int {return 42 }//單表達(dá)式函數(shù)與when一起使用 fun transform2(color: String): Int = when (color) {"RED" -> 0"GREEN" -> 1"BLUE" -> 2else -> throw IllegalAccessException("don't have this color") }fun main(args: Array<String>) {println(theAnswer())println(theAnswer2())println(transform2("RED")) }15、一個對象實(shí)例調(diào)用多個方法
當(dāng)一個對象想要調(diào)用多個方法時,可以使用with(){},在()內(nèi)填入對象,在{}內(nèi)依次填入需要調(diào)用的方法。
class Turtle {fun penDown() {}fun penUp() {}fun turn(degree: Double) {}fun forward(pixels: Double) {} }fun main(args: Array<String>) {val myTurtle = Turtle()with(myTurtle) {penDown()for (i in 1..4) {forward(100.0)turn(90.0)}penUp()} }16、可空布爾
fun ftt(b: Boolean?) {if (b == true) {println("true")} else {print("false or null")} }fun main(args: Array<String>) {idiomatic_usage.ftt(true)ftt(null) }總結(jié)
以上是生活随笔為你收集整理的Kotlin学习(3):习惯用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xsl:apply-templates和
- 下一篇: oracle maven依赖