Kotlin的基础

概述:
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链表集合

                    

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值