美文网首页
Kotlin in Action读书笔记

Kotlin in Action读书笔记

作者: EvanPoison | 来源:发表于2018-06-24 10:10 被阅读12次

Kotlin in Action读书笔记

第一章 Kotlin简介

  1. kotlin的特性
  • 类型推导
    • 测试
  • 可空类型
  • 函数式编程

第二章 Kotlin基础

  1. 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
  1. 属性

     //声明了一个Person类
     // 只读属性 name: 属性和getter 
     // 可写属性 isMarried: 属性和getter setter
     class Person(val name:String,var isMarried:Boolean)
    
  2. 自定义访问器getter

     class Rectangle( val height:Int, val width:Int){
    
         val isSquare:Boolean
             get() {
                 return height == width
             }
             // 省略花括号写法(表达式函数体)  get() = height == width
     }
    
  3. 枚举和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")
    
  4. 迭代和区间
    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")
    } 
  1. 使用"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")) 
    
  2. 使用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"
     }
    

相关文章

网友评论

      本文标题:Kotlin in Action读书笔记

      本文链接:https://www.haomeiwen.com/subject/fyejyftx.html