Kotlin in Action读书笔记
第一章 Kotlin简介
- kotlin的特性
- 类型推导
- 测试
- 可空类型
- 函数式编程
第二章 Kotlin基础
-
kotlin表达式函数体
两种函数风格:
- 代码块函数体:这就不多说了
- 表达式函数体:函数的内容,我们一般称之为代码块或者函数体,如果这个函数体是一个表达式,则称之为表达式函数体
//普通写法
fun max(a: Int, b: Int): Int {
return if (a > b) a else b
}
//使用表达式函数体改写, if在这里是表达式,而不是语句,表达式有值,语句没有值
fun max(a: Int, b: Int): Int = if (a > b) a else b
//返回值可省略,下面讲到的自定义访问器getter 就是这么写的
fun max(a: Int, b: Int) = if (a > b) a else b
-
属性
//声明了一个Person类 // 只读属性 name: 属性和getter // 可写属性 isMarried: 属性和getter setter class Person(val name:String,var isMarried:Boolean)
-
自定义访问器getter
class Rectangle( val height:Int, val width:Int){ val isSquare:Boolean get() { return height == width } // 省略花括号写法(表达式函数体) get() = height == width }
-
枚举和when表达式
//定义一个枚举,使用enum class enum class StringNumber(val num:Int){ ONE(1), TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), NINE(9); } //定义一个函数,参数是一个枚举常量,函数体是 表达式函数体 fun SwitchNumToString(num:StringNumber) = when(num){ StringNumber.ONE -> "一" StringNumber.TWO -> "二" StringNumber.THREE -> "三" StringNumber.FOUR -> "四" StringNumber.FIVE -> "五" StringNumber.SIX -> "六" StringNumber.SEVEN -> "七" StringNumber.EIGHT -> "八" StringNumber.NINE -> "九" } //调用 val num = SwitchNumToString(StringNumber.EIGHT) println("num = $num")
-
迭代和区间
5.1 for in区间[1,100]: 1..100 区间[1,100): 1 until 100 //小游戏: fun fizzBuzz(i: Int) = when { i % 15 == 0 -> "$i FizzBuzz" i % 3 == 0 -> "$i Fizz" i % 5 == 0 -> "$i Buzz" else -> "$i" } // 迭代1-100 for (i in 1..100){ println(fizzBuzz(i)) } // 迭代100-1 偶数 for (i in 100 downTo 1 step 2){ println(fizzBuzz(i)) } //迭代map 打印1-100的二进制 val map = TreeMap<Int,String>() for (i in 1..100){ //map.put(i, Integer.toBinaryString(i)) map[i] = Integer.toBinaryString(i) }
第一种迭代方式:
map.forEach { i, s ->
println("$i 的二进制是 $s")
}
或者:
for ((i,s) in map){
println("$i 的二进制是 $s")
}
遍历带下标
val list = arrayListOf("10","11","1101")
for ((index,value) in list.withIndex()){ //withIndex()
println("$index : $value")
}
-
使用"in"检查
/** * 是否是字母 */ fun isLetter(c:Char)= c in 'a'..'z' || c in 'A'..'Z' /** * 不是数字 */ fun isNotDigit(c:Char) = c !in '0'..'9' //返回true println("kotlin" in setOf("hello","kotlin","Java"))
-
使用in最为when分支
//分辨字母和数字 fun recognize(c:Char) = when(c){ in 'a'..'z'->"this is a letter" in '0'..'9'->"this is a digit" else -> "I don't know" }
网友评论