一、元组

1.1、二元元组

data class Pair<out A, out B>(public val first: A,public val second: B
) : Serializable

使用如下:

//声明1
val a=Pair<Int,String>(125,"Hello")
println(a.first)//125   获取第一个值
println(a.second)//Hello    获取第二个值
val message = a.toList()//转换为集合
println(message)//[125, Hello]//声明2:使用 to 声明
val b=125 to "Hello"
println(b.first)//125   获取第一个值
println(b.second)//Hello    获取第二个值// 声明3:指定接受值
val (x,y)=Pair<Int,String>(125,"Hello")
println(x)//125   获取第一个值
println(y)//Hello    获取第二个值

1.2、三元元组

data class Triple<out A, out B, out C>(public val first: A,public val second: B,public val third: C
) : Serializable

使用如下:

    //声明1val a = Triple<Int, Boolean, String>(125, true, "Hello")println(a.first)//125 第一个值println(a.second)//true 第二个值println(a.third)//Hello 第三个值println(a.toList())//[125, true, Hello] 转换为集合//声明2val (i, b, s) = Triple<Int, Boolean, String>(125, true, "Hello")println("i=$i,b=$b,s=$s")//i=125,b=true,s=Hello

二、空安全

2.1、空值问题

val str: String? = null
//1、非空断言 !!  ,不管是否为空,直接调用 不建议使用
// val length = str!!.length//“!!”强行放弃了非空判断
// println(length)//kotlin.KotlinNullPointerException//2、空安全调用符 ?. ,如果为空,则直接返回null   如果不为空,则返回长度
val length= str?.length
println(length)//null//3、Elvis运算符 ?: , 下面案例:如果为空返回-1 否则返回值
val str2:Int = str?.toInt()?:-1
//相当于
//    if(str!=null){//        return str.toInt()
//    }else{//        return -1
//    }
println(str2)//-1

2.2、空安全转换(as?)

val a: Any = "Hello"
// as 类型转换。 转换失败抛出异常
//val aInt: Int = a as Int//java.lang.ClassCastException//as? 如果转换失败则返回null 不会抛错
val bInt: Int? = a as? Int
println(bInt)//null

三、接收键盘输入

kotlin接收键盘输入使用readLine()

    var m:Intvar n:Intprintln("请输入m的值")m= readLine()?.toInt()?:-1println("请输入n的值")n= readLine()?.toInt()?:-1println("m+n=${m+n}")
//    请输入m的值
//    1
//    请输入n的值
//    2
//    m+n=3

四、条件控制语句if

  • if可以作为语句也可以作为表达式。当 if不作为语句,而是表达式,将返回值赋值给变量,则必须要else分支。
  • if表达式可以实现三元运算符效果,具备返回值,然后赋值给变量。
  • if表达式作为块,可以包含其他表达式,但最后一个表达式是该块的值。
fun main(args: Array<String>) {//求两个数的最大值val a: Int = 2val b: Int = 5println(max(a, b))//5
}
//求最大值  kotlin没有三元运算符
//fun max(a:Int,b:Int):Int{//    if(a>b){//        return a
//    }else{//        return b
//    }
//}//如果只有一行 可以去掉{}
//fun max(a:Int,b:Int):Int{//    if(a>b)
//        return a
//    else
//        return b
//
//}//去除if 中的return
//fun max(a: Int, b: Int): Int {//    return if (a > b) a else b
//}//函数还可以精简为函数表达式
fun max(a: Int, b: Int) = if (a > b) a else b

五、repeat简单循环执行(高阶函数)

repeat循环执行一些重复的任务.

inline fun repeat(times: Int, action: (Int) -> Unit)
//简单的循环执行打印
repeat(3){println(it)//0 1 2
}

六、for循环和foreach循环

 val str = "abc"/*--------------------------for循环------------------------------*///不打印角标for (c in str) {println(c)//a}// 打印角标for ((index, c) in str.withIndex()) {println("$index-----$c") //  0-----a}/*--------------------------forEach循环------------------------------*///不打印角标str.forEach {println(it)//a}//打印角标str.forEachIndexed { index, c ->println("$index-----$c")//0-----a}

七、返回处理

7.1、continue、break、return

 val str = "abc"//打印结果 a cfor (c in str) {if (c == 'b') {continue}println(c)}//打印结果 afor (c in str) {if (c == 'b') {break}println(c)}//forEach中不能使用 continue break 可以使用return ,打印结果 astr.forEach {if (it == 'b') {return}println(it)}

7.2、标签处返回

    val str1 = "abc"val str2 = "123"//打印结果  c=a,c1=1  c=a,c1=2  c=a,c1=3tag@ for (c in str1) {for (c1 in str2) {if (c == 'b') {break@tag}println("c=$c,c1=$c1")}}//打印结果 c=a,c1=1tag2@ for (c in str1) {tag3@ for (c1 in str2) {if (c == 'b') {continue@tag2}if (c1 == '2') {return@tag3}println("c=$c,c1=$c1")}}//forEach标签处返回val c = 0..9c.forEach {if (it == 5) {return@forEach}println(it)//0 1 2 3 4 6 7 8 9}

八、while和do while循环

  /*--------------------------while--------------------------*///打印结果 1 2 3 4 5 while 是先判断再执行var a = 1while (a <= 5) {println(a)a++}/*-------------------------- do while--------------------------*///打印结果 6   do……while 是先执行再做判断var b=6do {println(b)b++}while (b<=5)

九、when表达式

when 可以用任意表达式(而不只是常量)作为分支条件,可以用任意表达式(而不只是常量)作为分支条件;可以检测一个值是(is)或者不是(!is)一个特定类型的值(由于智能转换,你可以访问该类型的方法和属性而无需任何额外的检测);可以用来取代if-else-if链。如果不提供参数,所有的分支条件都是简单的布尔表达式,而当一个分支的条件为真时则执行该分支:

9.1、简单使用

val age = 18
println(todo(age))//开始上大学fun todo(age: Int): String {when (age) {7 -> {return "开始上小学"}12 -> {return "开始上中学"}15 -> {return "开始上高中"}18 -> {return "开始上大学"}else -> {return "未知"}}
}

9.2、when表达式加强

val age = 13
println(todo2(age))//上中学fun todo2(age: Int): String {when (age) {//        is Int -> {//是Int类型
//
//        }in 0..6 -> {//在区间里面return "在家玩"}7 -> {return "开始上小学"}in 7..11 -> {//在区间里面return "上小学"}12 -> {return "开始上中学"}13, 14 -> {//多条件合并return "上中学"}15 -> {return "开始上高中"}16, 17 -> {//多条件合并return "上高中"}18 -> {return "开始上大学"}else -> {return "未知"}}
}

9.3、when表达式不带参数

val age = 15
/***  kotlin里面的when表达式原理:*  简单的when表达式通过switch语句实现*  复杂的when表达式通过if else来实现*/
println(todo3(age))//开始上高中fun todo3(age: Int): String {when {age in 0..6 -> {//在区间里面return "在家玩"}age == 7 -> {return "开始上小学"}age in 7..11 -> {//在区间里面return "上小学"}age == 12 -> {return "开始上中学"}age == 13 || age == 14 -> {//多条件合并return "上中学"}age == 15 -> {return "开始上高中"}age == 16 || age == 17 -> {//多条件合并return "上高中"}age == 18 -> {return "开始上大学"}else -> {return "未知"}}
}

9.4、when表达式返回值

val age = 11
/*** when表达式返回值在{}最后一行  lambda表达式最后一行为返回值*/
println(todo4(age))//上小学fun todo4(age: Int): String {return when (age) {in 0..6 -> {"在家玩"//在区间里面}7 -> {"开始上小学"}in 7..11 -> {"上小学"}12 -> {"开始上中学"}13, 14 -> {"上中学"}15 -> {"开始上高中"}16, 17 -> {"上高中"}18 -> {"开始上大学"}else -> {"未知"}}

Kotlin实战(四)

Kotlin实战(三)相关推荐

  1. Kotlin实战练习——自定义圆形图片三种实现方式

    Kotlin实战练习--自定义圆形图片三种实现方式 前言 如今Kotlin越来越重要,本人也开始了Kotlin的学习.为了检测学习效果,加深学习印象,同时回顾一下以前的一些知识点,决定从写一个自定义圆 ...

  2. Kotlin 实战翻译 —— 仿微信图片选择开源库ImagePicker

    2017.10.27补充 在用Kotlin写项目的时候由于不能使用生成成员变量的快捷键,导致我写findViewById浪费了好多时间,后来才发现Kotlin对Android有更好的支持,可以完全不用 ...

  3. 云计算Python自动化运维开发实战 三、python文件类型

    为什么80%的码农都做不了架构师?>>>    云计算Python自动化运维开发实战 三.python文件类型 导语: python常用的有3种文件类型 1. 源代码     py ...

  4. 从Java到Kotlin(三)

    本篇文章主要对比Java跟Kotlin中的类和接口的写法. 目录 一.类的声明 二.构造函数 三.函数的参数 四.创建类的实例 五.数据类 六.枚举类 七.属性 八.内部类 九.可见性修饰符 十.继承 ...

  5. Kotlin实战指南二十:flow

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/117370700 本文出自[赵彦军的博客] 文章目录 往期精彩文章 flow 是啥 ...

  6. Kotlin实战指南十九:use 函数魔法

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/117366756 本文出自[赵彦军的博客] 文章目录 往期精彩文章 use函数 往期 ...

  7. Kotlin实战指南十八:open、internal 关键字使用

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/117365712 本文出自[赵彦军的博客] 文章目录 往期精彩文章 open关键字 ...

  8. Kotlin实战指南十七:JvmField、JvmStatic使用

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/116668666 本文出自[赵彦军的博客] 文章目录 往期精彩文章 @JvmFiel ...

  9. 【Qt】数据库实战(三)

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 增删改查操作 04. 名字绑定和位置绑定 05. 程序示例 06. 批处理操作 07. 事务操作 08. 附录 01. 概 ...

最新文章

  1. 总体参数的估计(概念)
  2. 10 不自动断开 设置wlan_WiFi和WLAN,还傻傻分不清?
  3. 编程方法学4:计算机科学发展简史
  4. 不安全的发布 java_如何在没有安全警告的情况下发布Java Web S...
  5. Linux中高斯分布的参数设置,华为openGauss 配置操作系统参数
  6. sqlite性能优化
  7. [FW]软件开发中的11个系统思维定律
  8. eclipse package explorer视图中怎么让default package不显示?
  9. leetcode力扣刷题系列python——2、两数相加
  10. Delphi7升级到Delphi 2010、Delphi XE、Delphi XE2总结
  11. 怎样写毕业论文的开题报告和任务书?
  12. R语言使用strsplit函数按照指定的分隔符号进行数据拆分、分裂(split)、分割后的数据类型为列表、unlist函数将拆分后生成的列表list转化为向量vector
  13. 蓝牙耳机连接了电脑但是声音外放的解决办法
  14. java基本变量_Java 基础之变量和基本数据类型
  15. fashion-mnist简介和使用及下载
  16. 电信天翼云搭建Halo博客
  17. 【免费股票数据接口|实测可用|史上最全】沪深A股实时交易数据数据API接口
  18. 海地PVC/COC认证
  19. TEXT must be immediately followed by END_TAG and not START_TAG (position: START_TAG seen ...<depende
  20. linux下pppoe服务器,Linux下配置pppoe服务器

热门文章

  1. 关于RGB颜色与十六进制颜色
  2. 金刚狼RPG游戏进度1
  3. 2021年度友盟+ APP消息推送白皮书:工作日6-8点通勤时间消息送达率每日最高
  4. http://jingyan.baidu.com/article/3065b3b6cc20f6becef8a44f.html
  5. 纯滞后系统的数字Smith预估控制-1
  6. 《Spark大数据技术与应用》肖芳 张良均著——课后习题
  7. 数据库关键字的执行顺序
  8. Ubuntu 20.04 画面撕裂解决办法
  9. 如何在10分钟内构建交互式HTML5广告
  10. 关于小黄车ofo的冬季