轻轻松松Kotlin快速入门(二)

前言

banners_twitter.png

由于文章涉及到的只是点比较多、内容可能过长,可以根据自己的能力水平和熟悉程度分阶段跳着看。image.png

Kotlin也不是那么难大家可以视频和文章配合着学习效率更高。

数据类

与Java等语言不同,kotlin创建只包含数据的类时,需要在类名前声明关键字:data。

data class KotlinBean (val brand : String)

在kotlin中,编译器会自动的从主构造函数中根据所有声明的属性提取以下函数:

· equals()

· hashCode()

· toString()

· componentN() functions (对应于属性,按声明顺序排列)

· copy()

如果这些函数已经在类中被明确定义了,或者从超类中继承而来,就不再会生成。不是所有的kotlin类都能声明为数据类,一般数据类声明都要满足以下条件:

· 主构造函数至少包含一个或多个参数;

· 所有的主构造函数的参数必须标识为val或var;

· 数据类不可声明为abstract,open,sealed或者inner;

· 数据类不能继承其他类(但是可以实现接口)。

Copy()

望词生意,此方法作用就是复制,我们可以使用该函数复制对象并修改部分属性,比如对于上面的KotlinBean类,实现类似下面示例:

fun copy(brand: String = this.brand) = KotlinBean(brand)

需要修改数据类的属性时用copy(),示例:

data class KotlinBean (val brand : String)

fun main(args: Array<String>) {
    val jack = KotlinBean(brand = "Jack")
    val olderJack = jack.copy(brand = "olderJack")
    println(jack)
    println(olderJack)
}

对应控制台命令输出为:

image.gif

数据类及其解构声明

解构声明,kotlin允许展示单个复合值,并使用它来初始化多个单独的变量。例如:

val pt=Point(111,222)
val (x,y)=pt
println(x) //打印111
println(y) //打印222

元组 ( 标准数据类 )

Kotlin的标准库提供了Pair(元组)和Triple(三元元组),可以把多个值同时赋给一个变量,或者同时给多个变量赋值。在新版的Kotlin中已经删除了多元元组,也就是只有Pair和Triple。

通常我们在对变量进行赋值时,只能附带一个值,例如:

val name = "batman"

通过元组对变量进行多个赋值,构造时也都可以通过泛型指定各个位置的对象类型:

fun main(args: Array<String>) {
    val batMan = Triple<String,String,Int>("Bluce","technology",10000)
    val jokerMan = Pair<String,String>("joker","Gotham")
    println(batMan.first)
    println(batMan.second)
    println(batMan.third)
    println("----------------------")
    println(jokerMan.first)
    println(jokerMan.second)
}

对应的控制台输出为:

image.gif 可以发现Kotlin的元组在进行单独类多数据交互情景下比Java友好(Java还要先声明一个bean类然后进行set/get操作)。值得一提的是,上述示例也用到了元组的常用API,比如Pair的:

pair.first    //获取第一个元素
pair.second   //获取第二个元素

Tuples的方法:

tuples.first  //获取第一个元素
tuples.second //获取第二个元素
third.third //获取第三个元素

两个类还都有toList()方法可以把存储的对象转化为List,这里不做赘述。

密封类

密封类用于表示受限制的类层次结构,当一个值只能在一个集合中取值时,而不能取其他值时。在某种意义上,这是枚举类的扩展(枚举类型的值集合也是受限的,但每个枚举常量只存在一个实例,而密封类的一个子类可以有可包含状态的多个实例)。

声明密封类,需要用关键字sealed来修饰。被sealed修饰的类默认是open的,所以可以被继承,而不需要显式使用open修饰符。虽然密封类可以有子类,但是所有的子类必须要内嵌在密封类中。

sealed不能修饰interface,abstract class(会报warning,但是不会出现编译错误)

sealed class SealedClass{
    class ExtendClass1: SealedClass(){

    }

    class ExtendClass2: SealedClass(){

    }
}

fun check(sealedClass: SealedClass): String =
    when(sealedClass){
        is SealedClass.ExtendClass1 -> "1"
        is SealedClass.ExtendClass2 -> "2"
    }

在密封类中使用 when 表达式 的时候,如果能够验证语句覆盖了所有情况,就不需要为该语句再添加一个 else 子句了。

条件

if条件判断

常用的判断和Java一样,这里提一下不同的用法

1.if可以作为三元运算符

val max = if (a > b) a else b

2.使用in判断是否在某个区间

val x = 1
//相当于条件 1<= x <=8
if(x in 1..8){
	println("在区间内")
}
//与上面的条件相反
if(x !in 1..8){
	...
}

3.is关键字类型转换

相当于Java中instanceof关键字
使用了is,kotlin已经自动完成了类型转换

val text = "hello"
if(text is String){
	...
}

when(swich分支)

1.字符串分支

val result = ""
when(result){
    "OK","SUCCESS" -> print("成功")
    "Falied" -> {
        一系列操作...
    }
    else ->{
        一系列操作...
    }
}

2.数值分支

val num = 2
when(num){
	in 1..10 -> println("num在1和10之间")
	11,12 -> println("num为11或12")
}

3.表达式使用

//hasPrefix方法返回true或fasle
fun hasPrefix(x: Any) = when(x) {
    is String -> x.startsWith("prefix")
    else -> false
}

4.不带参数

//里面的分支条件是布尔表达式
when {
    x.isOdd() -> print("x is odd")
    x.isEven() -> print("x is even")
    else -> print("x is funny")
}

数组

kotlin中数组用Array类实现,使用arrayOf方法或者是Array()的构造方法创建数组

//Int数组 [1,2,3]
val a = arrayOf(1, 2, 3)

//String数组 ["he","you"]
val a = arrayOf("he","you")

//工厂方法,["he0","he1],"he2"]
val array = Array(3, { i -> ("he" + i) })

//还可以传对象
val a = arrayOf(student1,student2)

除了类Array,还有ByteArray, ShortArray, IntArray,用来表示各个类型的数组,省去了装箱操作,因此效率更高,其用法同Array一样。

循环

while循环与java一样,这里不多说

普通for循环

//0-4循环(包括0和4) 打印01234
for(i in 0..4){
	println(i)
}

//反序 4-1 两边都包括 打印4321
for (i in 4 downTo 1){
	print(i)
}

//[0-4),不包括4 打印0123
for (i in 0 until 4) { 
     println(i)
}

//结果为13(步长为2,相当于每次循环i=i+2)
for(i in 1..4 step 2){
	println(i)
}

数组遍历

//collection数组,list,String等可迭代的对象
for (item in collection){
	print(item)	
}

//it就是数组中的一个元素
array.forEach { 
        println(it) 
}

//indices是数组的区间(0-length-1)
for (i in array.indices) {
    print(array[i])
}

//得到下标和数值
for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}

方法

无返回值

//Unit相当于Void,可以省略不写
fun sayHello(): Unit{
    println("hello world")
}

fun sayHello(){
    println("hello world")
}

带返回值

fun sayHello(): String{
    return "hello world"
}

//如果方法是作为表达式,则可以省略声明方法返回的类型
fun sayHello() = "hello"

// public方法则必须明确写出返回类型
public fun sum(a: Int, b: Int): Int = a + b   

带参数

fun max(num1: Int, num2: Int): Int {
    return if (num1>num2) num1 else num2
}

可变参数

可变参数使用vararg关键字修饰

fun vars(vararg v:Int){
    for(vt in v){
        print(vt)
    }
}

后文

Kotlin快速入门我这边还整理了一下这方面的资料需要的小伙伴可以扫描下方二维码!

Kotlin入门教程指南,全家桶学习资料(含高级Kotlin强化和Kotlin协程入门进阶实战)

Kotlin 是一种新型的静态类型编程语言,有超过 60% 的专业 Android 开发者在使用,它有助于提高工作效率、开发者满意度和代码安全性。不仅可以减少常见代码错误,还可以轻松集成到现有应用中。

在这里为了方便大家系统的学习Kotlin,这里特意联合了阿里P7架构师和谷歌技术团队共同整理了一份Kotlin全家桶学习资料。

内容概要:Kotlin 入门教程指南、高级Kotlin强化实战和史上最详Android版kotlin协程入门进阶实战 。

内容特点:条理清晰,含图像化表示更加易懂。

由于文章内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要 Android中高级面试必知必会 完整文档的可扫描下方卡片免费获取!

Kotlin入门教程指南

第一章 Kotlin 入门教程指南

​ ● 前言

img

第二章 概述

​ ● 使用 Kotlin 进行服务器端开发

​ ● 使用 Kotlin 进行 Android 开发

​ ● Kotlin JavaScript 概述

​ ● Kotlin/Native 用于原生开发

​ ● 用于异步编程等场景的协程

​ ● Kotlin 1.1 的新特性

​ ● Kotlin 1.2 的新特性

​ ● Kotlin 1.3 的新特性

img

第三章 开始

​ ● 基本语法

​ ● 习惯用法

​ ● 编码规范

img

第四章 基础

​ ● 基本类型

​ ● 包

​ ● 控制流:if、when、for、while

​ ● 返回和跳转

img

第五章 类与对象

​ ● 类与继承

​ ● 属性与字段

​ ● 接口

​ ● 可见性修饰符

​ ● 扩展

​ ● 数据类

​ ● 密封类

​ ● 泛型

​ ● 嵌套类与内部类

​ ● 枚举类

​ ● 对象表达式与对象声明

​ ● Inline classes

​ ● 委托

委托属性

img

第六章 函数与 Lambda 表达式

​ ● 函数

​ ● 高阶函数与 lambda 表达式

​ ● 内联函数

img

第七章 其他

​ ● 解构声明

​ ● 集合:List、Set、Map

​ ● 区间

​ ● 类型的检查与转换“is”与“as”

​ ● This 表达式

​ ● 相等性

​ ● 操作符重载

​ ● 空安全

​ ● 异常

​ ● 注解

​ ● 反射

​ ● 类型安全的构建器

​ ● 类型别名

​ ● 多平台程序设计

​ ● 关键字与操作符

img

第八章 Java 互操作与 JavaScript

​ ● 在 Kotlin 中调用 Java 代码

​ ● Java 中调用 Kotlin

​ ● JavaScript 动态类型

​ ● Kotlin 中调用 JavaScript

​ ● JavaScript 中调用 Kotlin

​ ● JavaScript 模块

​ ● JavaScript 反射

​ ● JavaScript DCE

img

第九章 协程

​ ● 协程基础

​ ● 取消与超时

​ ● 通道 (实验性的)

​ ● 组合挂起函数

​ ● 协程上下文与调度器

​ ● 异常处理

​ ● select 表达式(实验性的)

​ ● 共享的可变状态与并发

img

第十章 工具

​ ● 编写 Kotlin 代码文档

​ ● Kotlin 注解处理

​ ● 使用 Gradle

​ ● 使用 Maven

​ ● 使用 Ant

​ ● Kotlin 与 OSGi

​ ● 编译器插件

​ ● 不同组件的稳定性

img

第十一章 常见问题总结

​ ● FAQ

​ ● 与 Java 语言比较

​ ● 与 Scala 比较【官方已删除】

img

高级Kotlin强化实战

第一章 Kotlin 入门教程

​ ● Kotlin 概述

​ ● Kotlin 与 Java 比较

​ ● 巧用 Android Studio

​ ● 认识 Kotlin 基本类型

​ ● 走进 Kotlin 的数组

​ ● 走进 Kotlin 的集合

​ ● 完整代码

​ ● 基础语法

img

第二章 Kotlin 实战避坑指南

​ ● 方法入参是常量,不可修改

​ ● 不要 Companion、INSTANCE?

​ ● Java 重载,在 Kotlin 中怎么巧妙过渡一下?

​ ● Kotlin 中的判空姿势

​ ● Kotlin 复写 Java 父类中的方法

​ ● Kotlin “狠”起来,连TODO都不放过!

​ ● is、as` 中的坑

​ ● Kotlin 中的 Property 的理解

​ ● also 关键字

​ ● takeIf 关键字

​ ● 单例模式的写法

img

第三章 项目实战《Kotlin Jetpack 实战》

​ ● 从一个膜拜大神的 Demo 开始

​ ● Kotlin 写 Gradle 脚本是一种什么体验?

​ ● Kotlin 编程的三重境界

​ ● Kotlin 高阶函数

​ ● Kotlin 泛型

​ ● Kotlin 扩展

​ ● Kotlin 委托

​ ● 协程“不为人知”的调试技巧

​ ● 图解协程:suspend

img

史上最详Android版kotlin协程入门进阶实战

第一章 Kotlin协程的基础介绍

​ ● 协程是什么

​ ● 什么是Job 、Deferred 、协程作用域

​ ● Kotlin协程的基础用法

img

第二章 kotlin协程的关键知识点初步讲解

​ ● 协程调度器

​ ● 协程上下文

​ ● 协程启动模式

​ ● 协程作用域

​ ● 挂起函数

img

第三章 kotlin协程的异常处理

​ ● 协程异常的产生流程

​ ● 协程的异常处理

img

第四章 kotlin协程在Android中的基础应用

​ ● Android使用kotlin协程

​ ● 在Activity与Framgent中使用协程

​ ● ViewModel中使用协程

​ ● 其他环境下使用协程

img

第五章 kotlin协程的网络请求封装

​ ● 协程的常用环境

​ ● 协程在网络请求下的封装及使用

​ ● 高阶函数方式

​ ● 多状态函数返回值方式

img

第六章 深入kotlin协程原理(一)

​ ● suspend的花花肠子

​ ● 藏在身后的-Continuation

​ ● 村里的希望-SuspendLambda

img

第七章 深入kotlin协程原理(二)

​ ● 协程的那些小秘密

​ ● 协程的创建过程

​ ● 协程的挂起与恢复

​ ● 协程的执行与状态机

img

第八章 Kotlin Jetpack 实战

​ ● 从一个膜拜大神的 Demo 开始

​ ● Kotlin 写 Gradle 脚本是一种什么体验?

​ ● Kotlin 编程的三重境界

​ ● Kotlin 高阶函数

​ ● Kotlin 泛型

​ ● Kotlin 扩展

​ ● Kotlin 委托

​ ● 协程“不为人知”的调试技巧

​ ● 图解协程原理

img

第九章 Kotlin + 协程 + Retrofit + MVVM优雅的实现网络请求

​ ● 项目配置

​ ● 实现思路

​ ● 协程实现

​ ● 协程 + ViewModel + LiveData实现

​ ● 后续优化

​ ● 异常处理

​ ● 更新Retrofit 2.6.0

img

由于文章内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要 Android中高级面试必知必会 完整文档的可以加微信可免费领取!(承诺:100%免费)

更有更多资料,加微信免费领取

img

猜你喜欢

转载自blog.csdn.net/Misdirection_XG/article/details/129459004