适合有java或其他语言基础。
变量常量数组
常量
定义常量需要使用val关键字,和java中final关键字类似
val name : String = "XXXX"
由此可知kotlin的数据类型声明在标识符之后 <标识符>:<类型>
变量
定义变量则使用var关键字
var name : String = "XXXX"
1.常量和变量都可以没有初始值,但是需要在引用前进行初始化
2.kotlin支持类型的自动推断,因此在声明变量/常量可以不指定类型
var age = 2
var address = "anywhere"
数组
常见类型的数组声明方式
// 第一种
var long_array:LongArray = longArrayOf(1, 2, 3)
var float_array:FloatArray = floatArrayOf(1.0f, 2.0f, 3.0f)
var double_array:DoubleArray = doubleArrayOf(1.0, 2.0, 3.0)
var boolean_array:BooleanArray = booleanArrayOf(true, false, true)
var char_array:CharArray = charArrayOf('a', 'b', 'c')
// 第二种
var int_array:Array<Int> = arrayOf(1, 2, 3)
var long_array:Array<Long> = arrayOf(1, 2, 3)
var float_array:Array<Float> = arrayOf(1.0f, 2.0f, 3.0f)
var double_array:Array<Double> = arrayOf(1.0, 2.0, 3.0)
var boolean_array:Array<Boolean> = arrayOf(true, false, true)
var char_array:Array<Char> = arrayOf('a', 'b', 'c')
// 字符串数组有些不同
var string_array:Array<String> = arrayOf("I", "Love", "Kotlin")
Null检查机制
//类型后面加?表示可为空
var age: String? = "23"
//抛出空指针异常
val ages = age!!.toInt()
//不做处理返回 null
val ages1 = age?.toInt()
//age为空返回-1
val ages2 = age?.toInt() ?: -1
函数
kotlin中函数的定义需使用fun关键字
fun sum(a: Int, b: Int): Int { // Int 参数,返回值 Int
return a + b
}
没有返回值的函数可以有两种定义方式:
// 第一种 使用Unit关键字
fun main(args:Array<String>):Unit{
print("hello")
}
// 第二种 省略Unit关键字
fun main(args:Array<String>){
print("hello")
}
可变长参数
函数的变长参数可以使用vararg关键字
fun main(args:Array<String>):Unit{
funA(1,2,3,4,5,6,7,8)
}
fun funA(vararg numlist:Int){
for(i in numlist){
print(i)
}
}
输出结果:12345678
lambda
fun main(args: Array<String>) {
val sumLambda: (Int, Int) -> Int = {x,y -> x+y}
println(sumLambda(1,2)) // 输出 3
}
定义了一个sumLambda函数 (Int, Int) 是参数,-> 后面就是函数体
条件表达式
if
kotlin if条件的使用和java一样
但是这里有一个语法:使用if实现三元运算符
val c = if(a<b)a else b
when
when的时候和switch十分类似
var index : Int = 2
when(index){
1-> println("1")
2-> println("2")
3-> println("3")
else->{
print("other")
}
}
- 其中1-> 可以视为case 1:
- else 则是switch的defualt
但是和switch不同的是
1.可以使用
1,3 -> print("1 or 3")
相当于 case语句不加break
switch(index):
case 1://todo...
case 3://todo...
break;
case 2://todo
break;
此外还可以使用
in 1..10 -> print("x is in the range")
in validNumbers -> print("x is valid")
!in 10..20 -> print("x is outside the range")
in 和 !in 做范围匹配
循环控制表达式
区间
区间表达式由具有操作符形式 … 的 rangeTo 函数辅以 in 和 !in 形成。
// 从1遍历到4 输出“1234”
for (i in 1..4) print(i)
// 什么都不输出
for (i in 4..1) print(i)
// 指定步长
for (i in 1..4 step 2) print(i)
// 倒序 输出“42”
for (i in 4 downTo 1 step 2) print(i)
// 使用 until 函数排除结束元素 10 不会被输出
for (i in 1 until 10) {
println(i)
}
for 循环
kotlin 里的for循环就完全是foreach了
for (item: Int in ints) {
// ……
}
// 这里输出的是intArr的索引从0到8
var intArr:Array<Int> = arrayOf(1,4,5,1,2,3,7,1,2)
for(i in intArr.indices){
println(i)
}
// 使用库函数withIndex 实现同时取索引和值
for ((index, value) in array.withIndex()) {
println("the element at $index is $value")
}