学习kotlin第二天

来源:互联网 发布:js使用ajax上传图片 编辑:程序博客网 时间:2024/06/06 09:05

今天继续跟着kotlin官方文档踩坑,还是那句话,仅为记录我的学习过程,不喜勿喷。

今天继续跟着kotlin官方文档踩坑,还是那句话,仅为记录我的学习过程,不喜勿喷。

1、在声明处的类型后加表示可以为空,类似于java中的@Nullable

funparseInt(str: String): Int  {
    returnstr.toIntOrNull()
}

如上代码需要在Int返回值类型后加“?”否则会报错

Type mismatch.  Required:Int  Found:Int?

顺便说句,这里toIntOrNull()方法如果改成toInt()方法,有可能报NumberFormatException

2is运算符用于数据类型检测,已经检测出来的val类型的变量不需要显示转换。

fungetStringLength(obj: Any): Int? {
    if(objisString) {
        returnobj.length
    
}else{
        returnobj.length
    }
    returnobj.length
}

如上,if内已经检测为String类型可以直接当String类型使用,else里面为未检测出的obj对象,报错Unresolved reference: length。离开类型检测后仍然为之前的类型,故也报错Unresolved reference: length

3!is运算符和is运算符类似,但是是else里面内容为真

fungetStringLength(obj: Any): Int? {
    if(obj!isString) {
        returnobj.length
    }else{
        returnobj.length
    
}
    returnobj.length
}

同上,红色的length这里是报错的,此外,该段代码修改后为

fungetStringLength(obj: Any): Int? {
    if(obj!isString)  
        return null
    return
obj.length
}

4、我们知道,&&是会短路的,&&前面为假则不会执行&&后面的,所以执行&&后面的时候&&前面一定为真。所以&&前面为is表达式时,&&后面可直接使用该val类型变量。额.....似乎这段话有点啰嗦了

fungetStringLength(obj: Any): Int? {
    if(objisString &&obj.length>0) {
        returnobj.length
    
}
    return null
}

5for循环类似于java中的foreach,可直接遍历,也可以通过index遍历。

funmain(args: Array<String>) {
    valitems=listOf("apple","banana","pear")
    for(iteminitems){
        println(item)
    }
    for(indexinitems.indices) {
        println("item at $index is${items[index]}")
    }
}

6while循环和do...while循环和java中一样

funmain(args: Array<String>) {
    valitems =listOf("apple","banana","pear")
    varindex =5
    while(index < items.size) {
        println("item at $index is${items[index]}")
        index++
    }
}

7when表达式取代了类C语言中的switch,并且不仅是唯一类型值是否相等的比较,还可以与is!is等结合进行判断,此外else相当于类C语言中的default

fundescribe(obj: Any): String =
        when(obj) {
            1->"One"
            "Hello"
->"Greeting"
            is
Long ->"Long"
            !is
String ->"Not a string"
            else
->"Unknown"
        
}
funmain(args: Array<String>) {
    println(describe(1))
    println(describe("Hello"))
    println(describe(1000L))
    println(describe(2))
    println(describe("other"))
}

8、使用in A..B检测是否在AB之间,如下为检测x是否大于等于1,小于等于10

funmain(args: Array<String>) {
    valx =10
    if(xin1..10) {
        println("fits in range")
    }
}

9、使用!in检测是否在范围之外,和in一样前面为判断内容,后面为范围

funmain(args: Array<String>) {
    vallist =listOf("a","b","c")
    if(list.size!inlist.indices) {
        println("list size is out of valid list indices range too")
    }
}

其中,list.indices查源码可知返回值为IntRange类型

10、区间迭代,啥子意思哦,必须是整数吗?给浮点数就报错

The floating-point literal does not conform to the expected type Int

funmain(args: Array<String>) {
    for(xin1..5) {
        print(x)
    }
}

这里要注意的是迭代范围必须是前面小后面大,否则不对。

11、数列迭代,step顾名思义就是步长,downTo关键字成功解决了迭代范围需要前面小后面大的问题。数列迭代范围也不能是浮点数.....

funmain(args: Array<String>) {
    for(xin9downTo0step3) {
        print(x)
    }
}

好了,今天就到这里


原创粉丝点击