介绍
Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发。Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。已正式成为Android官方支持开发语言。
代码更简介、更简单,能够静态检测常见的陷阱。
https://www.jianshu.com/p/d30406daaf25
基本语法
程序入口 - main函数 (唯一)
fun main(args: Array<String>){
}
声明变量
// TODO 声明变量的三种方式
// 1: val (value) 不可变引用 相当于Java 中的final
// 2: var (variable) 可变引用 (不同于JavaScript,类型仍然不可变) 相当于Java中的普通变量
val a="Hellow "
val b: Int = 10
val c=8.8e8
val d: String
d="sss"
声明控件
控件可声明也可不声明,用的时候直接拿控件id名使用即可。
// 第一个是在自定义对象名 第二个是类
// 这里只是初始化 不能直接使用 - 不用初始化 直接使用布局id
var textView :TextView? =null
//没有声明 - 拿控件id直接使用
textview.setOnClickListener {
}
函数
计算之和
fun main(args: Array<String>){
//计算之和 控制语句是表达式,不是语句
print("sum 1 and 2 : "+sum(1,2))
}
fun sum( a : Int , b : Int) : Int{
return a+b
}
条件表达式
fun main(args: Array<String>){
println(max2(1, 2))
println(max(3, 5))
}
//两种方式
fun max(a:Int ,b:Int) : Int{
// 条件表达式
return if(a>b) a else b
}
fun max2(a : Int , b:Int) = if(a>b) a else b
//确保编译器只有唯一一条初始化语句被执行,if判断
val message : String
val isTrue : Boolean = true
if(isTrue) message = "true" else message="false"
引用变量
在变量名前加 $ 就可以引用变量 - 变量名要用{}包裹。
// TODO 字符串
val name= if( args.isNotEmpty()) args[0] else "yu"
println("Hello ,${name}")
println("Hellow , ${ if (args.isNotEmpty()) args[0] else "New"}")
循环
for
// for循环
var items = listOf("a","b","c")
for (item in items) {
println(item)
}
while
//while循环
var index = 0;
while (index < items.size){
// println("item at $index is ${items[index]}")
println("item at $index is ${items[index]}")
index++
}
when表达式
//when表达式
var x:Int = 2
when(x){
1 -> print("x==1")
2 -> println("x==2")
else -> println("else")
}
区间
区间 /范围(Ranges)表达式 :由操作符 … (rangeTo函数),in 和 !in 构成
val list= listOf("a","b","c")
val i=3
// 等价于 if( 1 <= i && i <= 10)
if( i in 1 .. 10){
println("$i , 位于【1,10】之间 ")
}
// 区间操作符 .. 的底层实现就是rangeTo()函数
if( i in 1.rangeTo(10)){
println("$i , 位于【1,10】之间")
}
// 检查数组下标索引是否越界
val array= listOf("aaa","bbb","ccc")
if(i !in 0..array.size -1 ){//如果 i 不在数组长度范围内
println("数组下标越界: array han only ${array.size}")
}
//检查数组是否包含某元素
if("b" in array){ //相当于contains
println("YES")
}
//TODO 2、整形区间 - 迭代(循环遍历)
// 整形区间: 可迭代(循环遍历),编译器会将整形区间转换为类似Java基于索引的for循环,没有额外开销
fun main(args: Array<String>){
for (i in 1 .. 4 ) print(i)//输出 1、2、3、4
for (i in 4 .. 1) print(i) //什么都不输出
}
类型检测与自动类型转换
is 运算符检测一个表达式是否某类型的一个实例,如果一个不可变的局部变量或属性已经判断出为某类型,那么检测后的分支中可以直接当作该类型使用,无需显示跳转。
fun getStringLength(obj : Any): Int ? {
// TODO 类型检测与自动类型转换
if (obj is String){
//在该分支内 obj 自动转换成 string
return obj.length
}
return null
}
数字类型转换
每个数字类型支持如下的转换:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
val a : Int ?=1
// val b : Long ? = a
val b : Long = 11
//显示转换来拓宽数字
val i : Int = b.toInt()
print(a)
val L = 1L+3 //long = long + int