前言
本来Java开开心心,Android又要搞个Kotlin
但是吧,谷歌爸爸说了:“I need” so我们就要:“I do”
kotlin的来历:
由JetBrains公司在2011年开发,并在2012年进行开源
说到JetBrains你一定会想起IntelliJ IDEA ,这个IDE号称是地球上最好的开发Java的IDE,当然也是对于Kotlin开发比较好的IDE(毕竟是Kotlin爸爸开发的)
kotlin的运行原理:
Kotlin跟Java一样(在运行过程中) 先是由JetBrains自制的编译器进行编译成Java虚拟机识别的class文件,再直接由Java虚拟机转换为二进制可识别文件这就是kotlin的工作原理与Java差别仅在是由哪个编译器转换成的class文件,Java虚拟机对于是从哪里来的class文件并不关心,只要是符合Java虚拟机标准就可以
kotlin优点缺点:
优点:
语法相对于Java简单,并且kotlin开发的代码量可能会比用Java开发的代码量少50%,拥有大量的高级特性
可以直接调用Java代码,无缝使用Java的第三方开源库
缺点
编译慢相对于Java而言
第一个代码 Hello kotlin
fun main(){
print("Hello Kotlin")
}
kotlin语言讲解:
- 变量:
- val 类型:
不可变的变量 不可被初始赋值后重新赋值(相当于Java中的 final) - var 类型:
可变的变量 可被初始赋值后重新赋值 - 例子:
- val 类型:
fun main(){
val a = 10//kotlin可以自动判断类型
print("a = "+a)//kotlin不用;
}
//kotlin类型推导并不是总是正常工作的
//比如对一个变量进行延迟赋值的话,就无法自动推导类型了,这时就要进行显式声明变量类型
fun main(){
val a: Int = 10
print("a = "+a)
}
在kotlin中抛弃了所有Java的基础类型,全部使用对象类型
java基本数据类型 | kotlin对象数据类型 | 数据类型说明 |
---|---|---|
int | Int | 整型 |
long | Long | 长整型 |
short | Short | 短整型 |
float | Float | 单精度浮点型 |
double | Double | 双精度浮点型 |
boolean | Booolean | 布尔型 |
char | Char | 字符型 |
byte | Byte | 字节型 |
- 函数
函数格式:
fun 函数名 (变量名1:类型,变量名2:类型) 返回值类型 {
函数体
}
- 举例:
import kotlin.math.max
fun main(){//dasdasdas
val a: Int = 10
val b: Int = 12
print("a b Max = "+lagerNumber(a,b))
}
fun lagerNumber(Number1:Int,Number2:Int):Int{
return max(Number1,Number2)
}
fun main(){//dasdasdas
val a: Int = 10
val b: Int = 12
print("a b Max = "+lagerNumber(a,b))
}
//Kotlin语法糖:
//函数体仅有一行 可以简化返回
fun lagerNumber(Number1:Int,Number2:Int):Int = max(Number1,Number2)
//同样也可以简化返回值(运用类型推断机制)
fun lagerNumber(Number1:Int,Number2:Int) = max(Number1,Number2)
逻辑控制
判断语句
- if条件语句
//传统做法(java)
fun largerNumber(number1:Int,number2:Int):Int{
var a = 0
if(number1>number2){
a = number1
}else{
a = number2
}
return a
}
//简化变量
fun largerNumber2(number1: Int,number2: Int):Int{
return if(number1>number2) number1 else number2
}
//运用之前的语法糖进行化简
//符合仅有一行代码(相当于仅有一行代码)
fun largerNumber3(number1: Int,number2: Int) = if (number1>number2)number1 else number2
- when条件语句
与Java中的switch类似
//java中的方法(同样也运用语法糖了)
fun getScore(name:String)= if (name == "Tom"){
86
}else if(name == "Jim"){
77
}else if(name == "Jack"){
95
}else if(name == "Lily"){
100
}else{
0
}
/*
运用kotlin的特性简化之后的代码
when和if一样也是可以没有返回值的
when可以传入一个任意类型的参数然后定义一系列条件格式是
匹配值 -> {执行逻辑}
当执行逻辑只有一行代码 {}可以省略
*/
fun getScore2(name: String) = when (name){
"Tom" -> 86
"Jim" -> 77
"Jack" -> 95
"Lily" -> 100
else -> 0
}
//when还可进行类型匹配
fun checkNumber(num:Number) = when(num){
is Int -> 10
is Double -> 1.1
else -> 0
}
//when也可以进行不带参数的匹配
//kotlin中的判断字符串对象相等使用 == 关键字
fun getScore3(name:String) = when {
name == "Tom" -> 86
name == "Jim" -> 77
name == "Jack" -> 95
name == "Lily" -> 100
else -> 0
}
//实现以Tom开头的名字分数为86
//使用带参数的Tom就无法实现
fun getScore4(name:String) = when{
name.startsWith("Tom") -> 86
name == "Jim" -> 77
name == "Jack" -> 95
name == "Lily" -> 100
else -> 0
}
循环语句
- while与Java中的一致
- for - in 循环(Java中加强版foreach)
区间的概念:
val range = 0..10
- 即是 [0,10]
val range = 0 until 10
- 即是 [0,10)
for (i in 1..10){
println(i)
}
for (i in 1 until 10){
println(i)
}
关键字 : step
默认情况下 for - in 会在区间范围内增1
改变步长为2
for (i in 1 until 10 step 2){
println(i)
}
关键字:downTo 降序区间生成一个 [10,1] 的降序区间
for (i in 10 downTo 1 step 2){
println(i)
}