学习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
坑2、is运算符用于数据类型检测,已经检测出来的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
returnobj.length
}
坑4、我们知道,&&是会短路的,&&前面为假则不会执行&&后面的,所以执行&&后面的时候&&前面一定为真。所以&&前面为is表达式时,&&后面可直接使用该val类型变量。额.....似乎这段话有点啰嗦了
fungetStringLength(obj: Any): Int? {
if(objisString &&obj.length>0) {
returnobj.length
}
return null
}
坑5、for循环类似于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]}")
}
}
坑6、while循环和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++
}
}
坑7、when表达式取代了类C语言中的switch,并且不仅是唯一类型值是否相等的比较,还可以与is,!is等结合进行判断,此外else相当于类C语言中的default。
fundescribe(obj: Any): String =
when(obj) {
1->"One"
"Hello"->"Greeting"
isLong ->"Long"
!isString ->"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)
}
}
好了,今天就到这里
- 学习kotlin第二天
- 学习kotlin第四天
- Kotlin 从学习到 Android 第二章 习惯用法
- Kotlin第二学
- Kotlin 第二站
- Kotlin学习
- Kotlin学习
- Kotlin学习
- Kotlin 学习
- kotlin学习
- 学习kotlin
- Kotlin学习
- Kotlin第二章:Kotlin 的基本语法
- Kotlin学习系列----什么是Kotlin?
- Kotlin学习--AndroidStadio配置Kotlin
- Kotlin详解:第二章,进阶
- 学习kotlin第12天_lambda表达式
- 学习kotlin第16天_反射
- Struts学习_Jquery发送ajax请求以及datatype参数为text/JSON方式
- AJAX实现二级联动
- Unity优化大全(三)之CPU-GC(内存回收)和Sricpt
- 开源中文分词FudanNLP
- Spring连接池的常用配置
- 学习kotlin第二天
- PHP中的this,self,parent
- iOS开发——AFNetworking框架使用详解
- android使用贝塞尔曲线做一个简单的玩意
- Android ListView.getChildAt(index)==null
- ios中的静态库和动态库制作的一些小知识
- 邮件管理
- css3 动画停留在最后一帧
- linux IPtables配置详细介绍,很清楚