Kotlin学习笔记之 1

作者 : 开心源码 本文共2899个字,预计阅读时间需要8分钟 发布时间: 2022-05-12 共210人阅读

1.基础语法

  • 方法形容

    fun methodName(type1 : Type, type2 : Type2) : returnType{}fun methodName(type1 : Type, type2 : Type2) : Unit {    type1 = type2}
  • 变长参数 vararg

    fun methodName(vararg v : Int){    //此处v是个数组    for(nv in v){       print(v)    }}

    相似于 java中的 …

    //主函数   数组类型的fun main(args : Array<String>){    }
  • lambda 匿名函数

    fun main(args : Array<String>){  //(传参类型1, 传参类型2) -> 返回类型 = { 具体参数1, 具体参数2 -> 返回参数}  val plus : (Int, Int) -> Int = { x,y -> x+y}  println(plus(1,2))}
  • var 可变 val 不可变

    有一个非常有意思的现象,kotlin自带属性判断功能,即你不指定具体的数据类型,kotlin可以帮你分析出你想要什么。比方说:

    //i被判断成Intvar i = 123//s被判断成Stringval s = "123"
  • String 字符串中直接引入参数和方法

    //$符号之后跟{}表示方法,跟参数名表示引用参数val s = "${a.replace("ss", "ww")}, and then it is $a"

    想要直接的去使用字符$,我们一般也是借助$去实现,由于$没有相应的转义符

    val s = "${`$`}, is this"
  • 关于空

    //这边我们可以直接把String? 看成是一种类型,解释为可以为空的String类型//可能会有疑问既然s已经被val形容,是final类型的了,还会出现可能为空的String//由于尽管你不能再对s赋值了, 但是你仍然可以改变非赋值的方式改变它,比方replace什么的等等val s : String? = "23"//一旦s为空就报错val a = s!!.toInt()//一旦s为空,可以继续执行不报错,并且此处的b为nullvar b = s?.toInt()//b为null之后,我们紧接着调用b的其余的方法,产生的也是null,并且不会报错,这就是强大的kotlin容错机制var c = b.toString()//? 和 ?: 的判断表示假如为空的话,那么就返回后面的内容//此处的有需要多说一句,一旦为空的情况,那么后面想给什么就给什么,无论字符串还是整型等等,kotlin均可以自动识别,跟你前面想要的类型没有关系var d = b?.toString() ?: "123"//此处需要注意,一旦是有可能出现为空的类型,kotlin就会在适当的时候通知到你var h = s?.toInt()var i = 1//此时因为h很有可能为空,因而kotlin会提醒你不允许直接使用*操作符,而是要使用times方法进行?操作var j = h * j    //即如下这样,times方法在kotlin中被用来做乘法的使用var j = h?.times(j)
  • 类型检测

    kotlin 中使用 is 来代替使用 isinstanceOf

    kotlin 中不存在Object类,通常这个方法可以传入任何数据类型,kotlin直接使用 Any

     fun getLength(s : Any){    if(s is String){       println(s.length)    } }
  • 范围

    java中使用的是 for(int i = 0; i < n; i++)

    kotlin中比较方便,直接使用 for(i in 1..n)

    ..针对任何可以进行比较的数据类型,比方 for(c in '0'..'9'),正对整形有单独优化,一般使用比较多的就是整型,并且对顺序有要求,只能从小到大

    for(i in 4..1) 不会进到for循环来,由于4无法走到1

    针对从高到低的情况,要使用到downTo for(i in 4 downTo 1)

    for(i in 1..4 step 2) ==== for(int i = 1; i <= 4; i = i + 2) 最终出来的是1,3

    ..和downTo都是包含边界数字的闭集[],如[1,4],假如想要开集,需要使用到until形容符

    for(i in 1 until 10) ====== [1, 10) 但是因为局限性,until也只能用在从小到大的并且只能做右边的开集,能用until,就尽量不去使用1..n-1

    范围既可以用在for循环中也能用在if条件判断中

    比方 if (i in 1..4) 1 <= i <= 4 if(c in '0'..'9') ‘0’ <= c <= ‘9’

    补充(1) 范围之外直接使用 !in

    if(i !in 1..4)  

    即 i 不在 1~4之间

    补充(2) 结合when来判断,数组中能否存在某元素

    when{   "a" in items -> {}   "b" in items -> {}}
  • with

    kotlin中我们可以借助with来进行连续调用方法

    class Turtle {      fun penDown()      fun penUp()      fun turn(degrees: Double)      fun forward(pixels: Double)  }    val myTurtle = Turtle()  with(myTurtle) { // 画一个 100 像素的正方形      penDown()      for(i in 1..4) {          forward(100.0)          turn(90.0)      }      penUp()  }
  • java7 try with resources

    java7中的特性,只需是实现了closeable的在使用完成之后需要释放资源的类,会在try代码体执行完成之后释放掉资源,在kotlin中我们一般使用use方法,规定为只需实现了closeable接口的都有这个方法,意思为use了之后就会释放自己的资源

    //java7try(BufferedReader br = new BufferedReader(new FileReader(path))){   return br.readLine();}//kotlinvar bufferedReader = BufferedReader(FileReader("path"))  bufferedReader.use {       print(it.readLine())  }
  • 注释习惯使用[]而非@param @return

    除非需要做特长的单独性说明,一般我们直接使用[]

    /**   * Returns the absolute value of the given [number].   */  fun abs(number: Int) = ……
  • 能用val不用var,一般用最基本不可变集合

    valvar不做过多解释了,此处的不可变集合指的是Set``List``Map,优先使用这些,而不是优先使用HashSet``ArrayList``HashMap

  • 条件语句优先级

    二元首选if,其次再用when

  • 循环语句优先级

    优先使用高阶函数,filter``map这种,需要单独解决的我们用for,除非在链式中调用

  • 能属性不用函数

    底层算法会优先使用属性,而不是函数。所以假如是没有参数的方法,可以直接用属性替代。

  • 强转操作符 as

    java中的强转是在对象前加上括号类型的方式,kotlin中是通过as进行强转的。

    一般我们为了避免出现castException或者者空指针的情况,直接使用 ?as来进行强转。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Kotlin学习笔记之 1

发表回复