安徽省工程建设网站,seo优化工作内容,wordpress迁移需要重新安装,南京制作网页公司从今天开始慢慢总结kotlin的相关知识#xff0c;和大家一起学习进步。
1#xff1a;变量
kotlin的变量定义有两种val和var。
第一种val
val i10#xff1b;val定义的变量为不可改变量#xff0c;如上面i10后#xff0c;如果我们添加
i10首先编译器#xff08;androi…从今天开始慢慢总结kotlin的相关知识和大家一起学习进步。
1变量
kotlin的变量定义有两种val和var。
第一种val
val i10val定义的变量为不可改变量如上面i10后如果我们添加
i10首先编译器android studio就会提示我们报错! 错误信息是Val cannot be reassigned
第二种 var var num 10num 102函数
fun addSum(i1: Int, i2: Int): Int {return i1 i2}看下上面的代码我们简单分析下组成
fun函数定义关键字addSum函数名i1Int对应参数名以及参数类型中间用分隔
也就是说函数中变量的使用方式是name: type的格式
当然我们还是给参数指定默认值
怎么去写呢
很简单
fun addSum2(i1: Int0, i2: Int1): Int {return i1 i2}
这么我们使用的时候就可以这么写
Log.i(tag, addSum2(num).toString())两个参数后面的: Int则代表函数的返回值类型
kotlin里面Int是首字母大写与java中int类似但是java里面的int是基本类型而kotlin里面则是一个类。简单截个Int的代码 kotlin中还可以把上面的函数更简化 private fun addSum2(i1: Int, i2: Int 2): Int i1 i2可以看到当函数返回单个表达式的时候我们可以吧{}以及return等省略替换为等号后面就是指定的代码体。
参数默认值的写法有人会发现我的传个Int 和string,怎么报错了 那么像这种我们怎么传值呢kotlin当然考虑到了这个问题而且给出了新的用法键值对传值的方法 如图所示我们制定参数名称就可以是不是很方便
3集合
首先来张整体的框架图 可以看到顶层的四个基本接口分别是 IterableMutableIterableCollectionMutableCollection。
而下面六个在创建的时候又分为可变和不可变集合。
3.1 list
首先我们来看下list相关 构建list我们需要用到标准的库函数listOf()listOfNotNull()mutableListOf()arrayListOf(),其中前两个是不可变集合后两个是可变的。
val list1 listOf(1, 2, 3)
val list2 mutableListOf(1, 2, 3)val list3 arrayListOf(2, 3, 4)val list4 listOfNotNull(1, 3, 4) 可以看到构建集合是非常简单的而且mutableListof构建的list2中有addremove等方法也就是可变集合。
至于listOfNotNull我们打印下看下输出结果 可以看到 listOfNotNull自动将null忽略可以看下源码
/*** Appends all elements that are not null to the given [destination].*/
public fun C : MutableCollectionin T, T : Any Arrayout T?.filterNotNullTo(destination: C): C {for (element in this) if (element ! null) destination.add(element)return destination
}可以看到在底层如果参数为null就不会添加到destination中。
到这里构建list已经完结我们来接着看遍历list 这里我们先说下kotlin中的循环遍历分为两种for循环和while循环。 val list1 listOf(1, 1, 1, null)for (i in list1) {println(i)}var size list1.size - 1while (size 0) {println(list1[size])size--}另外除了这两种外我们还可以使用Lambdas表达式 list1.forEach { println( it) }这种是不是更方便
3.2 set
set构建主要有setOf(),mutableSetOf(),hashSetOf(),linkedSetOf();
val set1 setOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 21)
val set2 mutableSetOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 21)val set3 hashSetOf(1, 2, 3)
val set4 linkedSetOfInt(1, 2, 3, 4, 5)其中只有setOf()是只读其余都是可读写的。 包含addaddallremove等方法。 另外从上图可以看出linkedSetOf()是不允许有null值的。 其次set中会自动去除相同元素这点跟java是一致的。
比如set1中虽然我们赋值了7个值但是set1实际为[1,2,3,21,null].
3.3 Map
MapK, out V 是以键值对的形式存在与listset一样构建时都分为可变和不可变集合。 其中mapof()为不可变 而linkedMapOf(), hashMapOf(),mutableMapOf()是可读写的。 val map1 mapOf(1 to map1-1, 2 to map1-2, null to null)val map2 linkedMapOf(1 to map2-1, 2 to map2-2, null to null)val map3 hashMapOf(1 to map3-1, 2 to map3-2, null to null)val map4 mutableMapOf(1 to map4-1, 2 to map4-2, null to null)println(map1--------------------------)map1.forEach { (key, value) - println($key \t $value) }println(map2--------------------------)map2[3] map2-3map2.forEach { (key, value) - println($key \t $value) }println(map3--------------------------)map3[3] map3-3map3.forEach { (key, value) - println($key \t $value) }println(map4--------------------------)map4[4] map4-3map4.forEach { (key, value) - println($key \t $value) }可以看到输出结果map的键值对是可以为null的。
4数组
kotlin中数组是Array代码很简单我们直接上代码
public class ArrayT {public inline constructor(size: Int, init: (Int) - T)public operator fun get(index: Int): Tpublic operator fun set(index: Int, value: T): Unitpublic val size: Intpublic operator fun iterator(): IteratorT
}可以看到get和set方法以及遍历和长度。 首先我们根据constructor来创建数组
var array0 Array(3) { i - i 1 }其中3是指数组长度sizei-i1赋值。 另外一种则跟listset等一致使用arrayOf(); val array arrayOf(1, 2, 3)array[1] 100array.forEach { println(it) }5数组集合转换
5.1数组转集合 val array arrayOf(1, 2, 3)数组创建好了开始转这里用到的是toList方法。
/*** Returns a [List] containing all elements.*/
public fun T Arrayout T.toList(): ListT {return when (size) {0 - emptyList()1 - listOf(this[0])else - this.toMutableList()}
}逻辑很简单如果size为0则返回空集合 如果为1则使用listof()创建不可变集合 否则使用toMutableList();
/*** Returns a [MutableList] filled with all elements of this array.*/
public fun T Arrayout T.toMutableList(): MutableListT {return ArrayList(this.asCollection())
}也很简单返回ArrayList。 当然Array转换的方法不止toList一种 感兴趣的朋友可以每个都熟悉下。
5.2集合转数组
这里拿toIntArray为例
/*** Returns an array of Int containing all of the elements of this collection.*/
public fun CollectionInt.toIntArray(): IntArray {val result IntArray(size)var index 0for (element in this)result[index] elementreturn result
}代码很简单1构建Int数组 2for赋值 3返回array。 另一种则是
val listStr listOf(list, set, map)
val arrayStr listStr.toTypedArray()
arrayStr.forEach { println(it) }