美文网首页
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