美文网首页
Kotlin基本语法

Kotlin基本语法

作者: 风卷残云啊 | 来源:发表于2023-01-09 18:25 被阅读0次

    第一章 基数变量和表达式

    一、数据类型

    1、String、Int、Boolean。。。 没有 int 、floater 等

    2、val 是只读类型, 可以声明在方法内。 Const val 是定义的常量,只能声明在方法外

    二、表达式

    1、range表达式
    var number =11
    
    //表示 在0到10的范围判断
    
    if( number in  0..10){
    
    }
    
    2、when表达式

    //KT 的 if 和when是表达式,有返回值 when 类似于Switch

    int week = 0
    val info  = when(week){
        1 -> "今天是星期一"
        2 -> "今天是星期二"
        3 -> "今天是星期三"
        4 -> "今天是星期四"
        else - >{
           println("忽略星期几")
        }
    }
    println(info)  //void 关键字 无返回  用Unit类代替了java void 关键字
    
    3、if表达式

    //Kt的if是表达式,有返回值,java if是语句,没有返回值

        boolean isLogin = false
           println("是否登录:${ if(isLogin) "登录成功" else "登录失败" }")
    

    四、函数表达式

    image.png

    Kt函数是先有输入,后又输出,方法前不写修饰符,默认public

    //参数可以给默认值
       private function1(age : Int  = 20){
          println(age)
        }
    
    可以无序传参
    Unit 无返回值可以不写,默认是
    Noting 类
      fun
    

    第二章 函数

    一、匿名函数

          val len = "hello".count()
          println(len)
      
      val len = "hello".count{
          it == "l"
       }
      
    
    image.png
    //第一步:函数输入声明
      val actions : () -> String
    
    // 第二步:对上面函数的实现
       actions = {
              "hello word"
        //匿名函数不用写return,最后一行就是返回值
       }
    
    //下面是对上面两步进行合并
    val actions : (Int,Int,Int) - > String = {arg1,arg2,arg3 ->
        "输入参数:$arg1 , $arg2,$arg3"
      
    }
    
    /*
       fun actions(arg1 : Int,arg2 : Int,arg3 : Int ) : String{
                   return  "输入参数:$arg1 , $arg2,$arg3"       
     }
    */
    

    二、it 关键字

    匿名方法,如果只有一个参数,可以不写变量名,系统会自动加一个it
    如下:

      val actions : (String) - > String = {
        "输入参数:$it"
       }
    
    /*
         等效如下函数
        fun actions(it : String) : {
            "输入参数:$it"
      }
    */
    

    三、匿名函数类型推断

         val method1 = { v1 Double, v2 Float, v3 Int ->
             "v1:$v1, v2:$v2,v3:$v3"
    }
    
    //等价于 method1 函数: (Double,Float,Int)-> String
    总结:
    //方法名: 必须指定参数类型,和 返回类型
    // 方法 = { 类型自动推断}
    

    第三章 空安全

    1、空安全表示

    name String  = "dfdfdfdf"   //表示不为空,默认就是不为空
    sex String ? =null           //表示可为空 
    sex?.length()             //表示可为空,如果为空,就不执行
    sex!!.length()           //表示断言,如果是空就抛空指针异常
    

    2、空合并操作符 xxx ?: “如果为空” //表示如果不为空则返回前面,如果为空则返回 ?: 后面的值

    3、异常处理 和java一样

    try{
                    } catch(e:Exchation){
              }
    

    第五章 常用数据操作

    1、== 和 ===的区别

    == 值 内容的比较 相当于java的 equals
    === 引用的比较,相当于java == ,注意对于声明的两个相同字符串常量,=== 依然是同一个引用

    2、String forEach

       String str = "ABCDEFGDDDFF"
    
        str.forEach{
          print("$it")//it是每个字符
      }
    

    3.类型转换

    1、String 转 Int
        val number  = "666".toInt()
        
        val number = "33.22".toInt()//这个会崩溃,如何解决如下
        
        val number  = "33.22".toIntOrNull() //如果失败就返回null,
    
    2、
    Double转Int
      println(22.34556.toInt())//22四舍五入
    println(22.34556.toInt())//22 四舍五入
    println(22.54556.roundToInt())// 23四舍五入
    
    //r的类型:String
    val r  = "%.3f".format(32.34345434) //保留三位小数
    

    4、apply内置函数

    5、let内置函数

        val reuslt = listOf(5,6,3,3,2,1).let{
           it.first() + it.first()  
         //匿名函数返回的是最后一行,
         // it表示集合本身
    }
    

    6、run函数

          val ruslt =     "dfdfdff".run{ 
                    //内部持有this,
                    //返回值是最后一行
                      8888.8f
                  }
    

    7、with函数

          val str =     "dfdfdff"
           with(str){
                   //内部持有this,
                    //返回值是最后一行
          1243.0.f
       }
    

    8、also函数

          val str =     "dfdfdff"
          val result = str.also{
        //返回类型为本身,和apply函数一样
        //匿名持有it, it = str本身
    }
    

    9、takeIf函数和 takeUnless函数

        val String str = “take"
        str.takeIf{
         true/false
        //true 返回str本身
        // false 返回 null
    }
    
    takeUnless函数和takeIf刚好相反
    
     str.takeUnless{
         true/false
        //false 返回str本身
        // true 返回 null
    }
    

    第六章 集合框架

    1、list

    1.1不可变list

          val   list = listOf("小明","小红","小l")
          var value = list[0]//这种会出现角标越界异常
    
    
    //下面两种方式可避免角标越界,如果越界就返回null
      var value = list.getOrElse(100){
          "你越界了"
            }
          var 
    value = list.getOrNull(100){
          "你越界了"
            }
    
    

    1.2可变list

       val list = mutableListOf("张三","李四","王五")
       list.add("haha")
       list.remove("张三")
      
    //不可变list无法完成可变list的add和remove操作,
    //只有转成可变list才能操作
      val list1 = listOf(1,22,33,11)
      val list2 = list1.toMutableList()
    
    //当然可变list也可以转换成不可变list,
     val list3 = list2.toList()
      
    

    1.3 mutataor函数

       val list = mutableListOf("df","dd","ccc","dd")
      list += "dfdfd"
      list -= "ccc" 
      // += 和 -= 相当于 add和remove ,是运算符重载
    
      list.removeIf{
        it.contains("2") //过滤删除
    }
    

    1.4 list遍历

          val list = listOf(1,2,3,4,5,6)
      //第一种
      for(i in list){
        print("元素:$I")//I是每个元素
       }
    //第二种
    list.forEach{
            print("元素:$it")//it是每个元素
         }
    
    //第三种带下标的
    list.forEachIndexed{ index,item
            print("元素:$item,下标:$index")//it是每个元素
         }
    
    

    1.5 list 全量解构和部分解构

    2、 Set集合

    2.1 不可变set集合

        val   set = setOf("11","22","33","11")
        //set集合不能出现重复的元素
    print(set.elementAt(5))
      //会崩溃,角标越界
    
      print(set.elementAtOrElse{
            "越界了"
          })
      set.elementAtOrNull(88)?:   "越界了"
        
    

    2.2 可变set集合

        val   set = mutableSetOf("11","22","33","11")
        //set集合不能出现重复的元素
    print(set.elementAt(5))
      //会崩溃,角标越界
    
      print(set.elementAtOrElse{
            "越界了"
          })
      set.elementAtOrNull(88)?:   "越界了"
        
       set.add("55")
       set.remove("11")
    

    2.3 list快捷去重

        val   list = mutableListOf("11","22","33","11")
        list.toMutableSet().toList()   //这样去重
        等价于下面:
      list.distinct()
    

    3、数组

    数组和list的操作几乎一毛一样


    list转数组
        val list = listOf(1,2,3)
      var intArray = list.toIntArray
    
     注意 Array<Object>   是对象类型
    

    4、Map

    4.1、map创建

     第一种方式创建
       var map1 = mapOf("value1" to("key1"),"value2" to("key2"),)
    第二种方式创建
       var map2= mapOf(Pair("key1","value1"),Pair("key2","value2"),)
    
    

    4.2、map操作

    
       var map1 = mutableMapOf("value1" to("key1"),"value2" to("key2"),)
    
       val value =   map1["key1"]
      //  或者通过
        map.getOrDefault("key","默认值")
     
        map1 +=  "AA" to  "value"
        map1["key" ] = value
    
    

    4.3、map遍历

    
       var map1 = mapOf("value1" to("key1"),"value2" to("key2"),)
     第一种
     map.forEach{ 
        print( "key:$it.key,value:$it.value")
    }
     第二种:
    map.forEach   { key,value->
        
    }
     第三种种:
    map.forEach   { (key,value)->
        
    }
    第四种
            for(item in map){
          print(item.key,item.value)
        }
    
    

    第七章 类和接口

    构造函数

      class  KtClassDemo (name : String,age : Int) {
              var name = name    
              var age = age
        }
    

    主构造、次构造、init方法的初始化顺序

        class Test(name : String,age : Int){//先调用主构造
         //第二步初始化init
      init{
              }
          construction():this
        }
    

    相关文章

      网友评论

          本文标题:Kotlin基本语法

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