目录
概述:
基本语法
1、实体声明
2、条件判断
when:
3、循环
4、数组和集合
数组:
概述:
Kotlin是一个用于现代多平台应用的静态编程语言。
Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。
此外,Kotlin还可以编译成二进制代码在直接运行在机器上,如嵌入式设备或iOS。
基本语法
首先,在Kotlin当中不用写 ";", 确实是非常爽的一件事情,代码分段等通过{}来进行。非常爽。
1、实体声明
在kotlin当中声明变量与Java有很大差异,基本格式:
权限修饰符 var/val 变量名 : 类型(可以没有) = xxxxx
例如:
//空安全变量
var str: String = "hello"
var str1 = "word"
val str2 = "hello word"
//可为空字符串变量
var str2:String? = null
其中变量默认都是非空变量,也就是默认变量一定不会出现为null的情况。
变量声明分部分学习:
1、 权限修饰符:kotlin默认的权限修饰符不是Java当中的protect, 而是public,因此默认也是省略。
2、var/val : 变量可以发生变化,就像Java当中的普通变量那样。 val 修饰的变量不可改变,且必须要在一开始便初始化。
3、类型声明: kotlin当中通过 最后的 :String 来声明类型,当然Kotlin语言本身也会进行类型估计判断。
2、条件判断
1、if else : 与Java一致,省略不说。
2、kotlin中的switch: when : when是一个kotlin当中的非常好用的关键字,可以完成取代switch,完成很多我们想要的结果:
when:
When的基本使用:
使用示例:
// 测试值 x = 0, -1, 1, 2, 3, 6, 10var x =10
var x = 1
when (x){//常量
2 -> println("等于2")
//数值表达式
if(x > 0) 1 else -1 -> println("大于0并等于1,或小于0并等于-1")
//Boolean类型表达式
in 1..5->println("范围匹配1-5")
!in 6..9 -> println("不是6-9")
is Int->println("类型判断")
else -> println("else")
}
// 代替if...else if
when{
x > 6 && x <= 10 -> println("大于6小于等于10")
x < 6 -> println("小于6") else -> println("else")
}
对于when (x) 中的x, 下面行的 '->' 前是一种条件,满足该种条件则开始执行右侧的语句。
类似于Java中的switch(x) 下面的case。进行了很多省略。
同时,when还有很多有趣的关键字,以上面的代码为例:
1、if(x > 0) 1 else -1 -> println("大于0并等于1,或小于0并等于-1") :对于满足x > 0 同时 x == 1 || x == -1,执行后面语句
2、in 1..5 : 若x 满足1 ~ 5的范围,则执行后面的语句
3、is Int : 如满足类型为Int,执行后面的语句。
若满足每一次语句便会执行该语句,跳过后续语句的执行。
看一下下面的代码:
var result = when(animal){
EAGLE, DUCK ->"鸟类"
DOLPHIN, TIGER ->"兽类"
CARP ->"鱼类"
LOCUST ->"昆虫类"else->"未知动物"}// 输入:DUCK,返回:当前动物的种类为:鸟类println("当前动物的种类为: $result")
可以看出,在Kotlin中,when不是一个语句,而是一个表达式,可以作为参数返回。
因此,也可以用when来做方法返回值:
fun displayAnimalType(animal: Animal) = when(animal){
Animal.EAGLE, Animal.DUCK ->"鸟类"
Animal.DOLPHIN, Animal.TIGER ->"兽类"
Animal.CARP ->"鱼类"
Animal.LOCUST ->"昆虫类"else->"未知动物"}
最后,when还可以做无参的代码,类似于if else :
when {
name?.length != 3 -> toast("illegal name length.")
name != "tom" -> toast("illgal name")}
3、循环
1、while() 和 do.....while()和Java一致
2、for循环:在kotlin当中有很多for循环类型,能够满足各种需求,详见下面示例:
val list =arrayListOf("aa","bb","cc")
//递增 相当于for (int i = 0; i < list.size(); i++)
for(i in list.indices){
print(list[i])
}
//递增 相当于 for (int i = 2; i < list.size(); i++)
for(i in 2..list.size-1){print(list[i])}
//递减相当于 for (int i = list.size() - 1; i >= 0; i--)
for(i in list.size -1 downTo 0) {
print(list[i])
}
//操作列表内的对象
for(item in list) {
print(item)
}
// 加强版
for ((i, item) in list.witnIndex()) {
print(list[i])
print(item)
}
//变种版
list.forEach {print(it)}
list.forEach {print(it)}
list.forEachIndexed { i, s -> print(list[i])print(s)}
list.forEachIndexed(object :(Int,String)->Unit{
override fun invoke(i:Int, s:String){print(list[i])print(s)}})
4、数组和集合
数组:
Kotlin声明对象数组主要有三种方式:
1、使用arrayOf函数和指定的数组元素创建数组:
//Java写法:
String[] params1 = {"str1", "str2", "str3"};
//kotlin写法:
val params1 = arrayOf("str1", "str2", "str3")
会自动识别arrayOf里面的数据大小生成对应大小的数组,同时给予赋值。
2、使用arrayOfNulls函数创建一个指定大小的并初始化每个元素为null的数组
//Java写法:
String[] params2 = new String[12];
//kotlin写法:
val params2 = arrayOfNulls<String>(12)
初始化数组,数组的值都为null值。
3、Array构造方法指定数组大小和一个生成元素的lambda表达式
//kotlin写法:
val params3 = Array<String>(3){i -> "str" + i }
// 也可以这么写
val params=Array(3){"str$it"}
生成的数组都有默认值。
Kotlin基本数据类型的声明:
var arrInt = arrayOf(1, 2, 3)
val intArray: IntArray = intArrayOf(1, 2)
val charyArray:CharArray= charArrayOf('H','E','T','Y','W','K','B')
val strArray:Array<String> = arrayOf("Hello","Kotlin")
还有ByteArray、ShortArray、LongArray、FloatArray、DoubleArray、BooleanArray
在Kotlin的数组替换还可使用: xxx.set(0, "kotlin") 其效果等同于 xxx[0] = "koltin"
kotlin当中对集合进行了很大程度的整合,基本上来说分为可变集合、不可变集合,在这两种集合当中又分出了List集合、Map集合、Set集合。
除此之外还有四个基本接口
- Iterable ——所有集合的父类
- MutableIterable —— 继承于Iterabl接口,支持遍历的同时可以执行删除操作
- Collection —— 继承于Iterable接口,仅封装了对集合的只读方法
- MutableCollection ——继承于Iterable Collection,封装了添加或移除集合中元素的方法
List:
创建不可变List:
val mList = listOf<Int>(1, 2, 3)
// 读取
Log.i("TAG", "onCreate: " + mList[0])
创建可变List:
val mList = mutableListOf<Int>(1, 2, 3)
// 也可创建空集合:
// val mList = mutableListOf<Int>()
// 进行添加测试
Log.i(TAG, "mList size:" + mList.size)
mList.add(1)
mList.add(2)
Log.i(TAG, "mList size:" + mList.size)
此外还有两个声明List集合的方法
- emptyList()——创建一个空集合
- listOfNotNull ()—— 创建的集合中不能插入null值
创建可变Map:
val mList = mutableMapOf("key1" to 1, "key2" to 2)
一般使用to的形式创建map。
此外还有
- emptyMap()——创建一个空map
- hashMapOf()——创建一个hashMap
- linkedMapOf()——创建一个linkedMap
- sortedMapOf()——创建一个sortedMap
这些都是与Java息息相关。
Set:
Set的使用与List基本一致,只不过其是不可重复的。
创建一个可变Set:
val mSet = mutableSetOf<Int>(1,2,3)
Log.i(TAG, mSet[0])
此外还有如下方法
- emptySet() ——创建一个空的set集合
- linkedSetOf()—— 创建set链表集合