Android修行手册之Kotlin-【Null检查】、【类型检查】、【区间】、【条件语句】、【循环控制】

举报
芝麻粒儿 发表于 2021/12/30 20:58:23 2021/12/30
【摘要】 千军万马一将在,探囊取物有何难。本文5.1千字,新手阅读需要8分钟,复习需要3分钟 【收藏随时查阅不再迷路】 👉关于作者众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码...

千军万马一将在,探囊取物有何难。

本文5.1千字,新手阅读需要8分钟,复习需要3分钟 【收藏随时查阅不再迷路】

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单

👉前提

这是小空坚持写的Android系列,欢迎品尝。

👉实践过程

😜【Null检查】

Null安全是Kotlin的宣传特点,但是他并不是无感的,其实就是靠强制的代码规范,让你写的代码有良好的空判断。虽然Java也可以做到,但是因为是主观的意识,任何人都存在拉下的可能。

所以Kotlin来帮咱们做这件事,如果你不遵守,直接编译项目的时候就编译不过去。

所以从变量声明的时候就不能为空,需要特殊处理,这和【TypeScript】很类似。

字段后加【!!】(双叹号)会抛出空异常,加上【?】代表可为空,默认变量不能为空,会报错。

image.png

//类型后面加?表示可以为空
var myAge: String? = "666"
myAge = null
//变量为空时抛出空指针异常
val ageZero = myAge!!.toInt()
//判断myAge为空 则ageOne也为空
val ageOne = myAge?.toInt()
Log.e("TAG", "芝麻粒儿输出1: " + ageOne)
//myAge为空的时候返回-1
val ageTwo = myAge?.toInt() ?: -1
Log.e("TAG", "芝麻粒儿输出2: " + ageTwo)

😜【类型检查】

Java中有【instanceof】关键字可以检测是否为某个类型,Kotlin中也有,是【is】

//类型后面加?表示可以为空
var myAge: String? = "666"
if (myAge is String) {
    //判断变量myAge是否为字符串类型
}

Kotlin有一个【Any】类型,结合【is】**,可以自动转换类型,如下

//类型后面加?表示可以为空
var myAge: Any? = "666"
if (myAge is String) {
    //判断变量myAge是否为字符串类型
    Log.e("TAG", "芝麻粒儿输出0: ${myAge.length}")
}

😜【区间】

这点倒是个新鲜词,顾名思义就是数学上的区间,比如1到10所有的数字。使用【…】实现,注意是两个点不是三个点,不要和Java的可变参数搞混了。

暂时还没想到应用场景

for (i in 1..6)
  Log.e("TAG", "芝麻粒儿输出3: $i") // 输出“123456”
for (i in 1..6 step 2)
  Log.e("TAG", "芝麻粒儿输出4: $i")// 设置步长,步长和间隔是有区别的 间隔是步长减一 为1 输出“135”
//有正序的就有倒叙的
for (i in 6 downTo 1)
  Log.e("TAG", "芝麻粒儿输出5: $i") // 输出“654321”

😜【条件语句】

基本所有的编程语言都通用,这一点差别没有【if】【else】【else if】

只不过多了一点就是可以直接将条件语句if前面赋值。前提是返回的类型一致。

var TempTwo = 10;
var TempThree = if (TempTwo == 10) {
    "返回的相等"
} else {
    "返回的不等"
}
Log.e("TAG", "芝麻粒儿输出9: $TempThree")

Kotlin中没有switch用法,而是when语法,其中else就类似switch的default,其他分支不满足走这个else,而如果是多个判断相同的处理,Java的switch中是去掉break,when是直接用逗号分割。

var TempFour = 8;
when (TempFour) {
    in 1..5 -> {
        Log.e("TAG", "芝麻粒儿输出10: 可以只用in 判断是否在一个区间内")
    }
    2,3,4->{
        Log.e("TAG", "芝麻粒儿输出10: 变量2或3或4都走这")
    }
    5 -> {
        Log.e("TAG", "芝麻粒儿输出10: 她会判断是5还是8")
    }
    8 -> {
        Log.e("TAG", "芝麻粒儿输出10: 变量是8所以走着")
    }
    else -> {
        Log.e("TAG", "芝麻粒儿输出10: 上面都不走走着,类似switch的default")
    }
    //判断的类型需要和when括号里面的一致
    //"如果是字符"->{}
}

唉,关于when的用法还有一些,感觉使用概率不大就不提了,但是这是个重点哦。题外话:整的花里胡哨的,感觉不如Java易懂。洁是洁了,但并不简单啊,还得想一会才能搞明白意思。

😜【循环控制】

循环是代码中用的很频繁的一种控制了,在Kotlin中循环虽然也是for关键字,但里面的自增自减有很大不同

var listThree = arrayListOf<String>()
listThree.add("这是")
listThree.add("数组")
listThree.add("List")
for (idnex in 1 until 10) {
    //这是1-10循环  等同于for (int i = 1; i < 10; i++)
}
for (idnex in 10 downTo 1) {
    //这是1-10循环  等同于for (int i = 10; i >0; i--)
}
for (idnex in 1..10) {
    //这是1-10循环  等同于for (int i = 1; i <= 10; i++)
}
for (index in 1..10 step 2) {
    //这是循环以2自增for (int i = 1; i <= 10; i+=2)
}
for (intss in listThree) {
    Log.e("TAG", "芝麻粒儿循环: $intss")
}
for (intss in listThree.indices) { //得到的是角标位置index
    Log.e("TAG", "芝麻粒儿循环: " + listThree[intss])
}

while 与 do…while 循环和Java没有什么不同。

返回和跳转

支持Java中return break continue这些。语法也没差异,但是多了个标签功能,也就是break continue可以跳转到你指定的循环,比如某个五循环的嵌套,默认break continue这些只能返回当前循环,但是用上标签她们可以任意的跳出向上的循环:比如直接跳出所有循环。

标签是以你随便起名+@符号组成的

如下:

one@ for (i in 1..100) {
    Log.e("TAG", "芝麻粒儿循环i: $i")
    two@ for (j in 1..100) {
        if (j > 2) {
            Log.e("TAG", "芝麻粒儿循环j: $j")
            //当满足j>2的时候,break因为是@one,则直接跳出这两个循环
            break@one
        }
    }
}

仅仅输出这两个:
2021-10-13 17:08:29.820 10437-10437/cn.appstudy E/TAG: 芝麻粒儿循环i: 1
2021-10-13 17:08:29.820 10437-10437/cn.appstudy E/TAG: 芝麻粒儿循环j: 3

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
https://juejin.cn/user/4265760844943479
📢欢迎点赞👍收藏🌟留言📝

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。