java代码写久了自然会想换个语言玩一下,而且kotlin作为android的官方语言,总是要学习下的,故这里先来学习下一些基本语法吧,打个小基础,后面才能游刃有余地开发。
这里省略了很多一般的语言需要的语法,只简单介绍下开发时要用到的。
val a: Int = 4 // 立刻赋值
val b = 8 // Int类型是自推导的
val c: Int // 没有初始化器时要指定类型
c = 22 // 推导型赋值
var x = 20
一个a+b的函数,参数是a和b, 返回一个Int的结果
fun printSum(a: Int, b: Int): Int {
println("sum of $a and $b is ${a + b}")
}
也可以写成,也即是单表达式函数
fun sum(a: Int, b: Int) = a + b
使用$+变量名来获取对应的值用来字符串插值
var a = 1
var b = 2
var s1 = "sum of $a and $b is ${a + b}"
// $a, $b可以直接获取a和b的值
a = 3
b = 4
var s2 = "${s1.replace("is", "was")}, but now sum is ${a+b}"
使用”is”操作符检查一个表达式是否是某个类型的实例,类似”instance”
fun getStringLength(obj: Any): Int? {
// obj 将会在&&右边自动转换为 String 类型
if (obj is String && obj.length > 0) {
return obj.length
}
return null
}
使用 in 操作符遍历items列表数据
val items = listOf("hello1", "hello2", "hello3")
for (item in items) {
println(item)
}
val x = 10
val y = 9
if (x in 1..y+1) {
println("fits in range")
}
for (x in 1..5) {
print(x)
}
for (x in 1..10 step 2) {
print(x)
}
for (x in 9 downTo 0 step 3) {
print(x)
}
fun describe(obj: Any): String =
when (obj) {
1 -> "One"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a string"
else -> "Unknown"
}
fun foo(a: Int = 0, b: String = "") { ... }
其中a和b都有默认的构造函数,在创建对象的时候就不需要给它赋值了
val positives = list.filter { x -> x > 0 }
或者
val positives = list.filter { it > 0 }
这里使用了lambda表达式,list的filter过略掉x>0的,当然不指定x的话,可以用it代替
when (x) {
is Long -> ...
is String -> ...
else -> ...
}
表示这个对象可能为空
//在变量类型后面加上问号,代表该变量是可空变量
var name: String? = "eastmoon"
这里的name后续可以赋值为空,
//在变量类型后面加上问号,代表该变量是可空变量
var name: String = "eastmoon"
这里的name后续不可以赋值为空
如果不为空则… 的简写
val files = File("Test").listFiles()
println(files?.size)
如果不为空…否则… 的简写
val files = File("test").listFiles()
println(files?.size ?: "empty")
如果不为空执行某操作
val data = ...
data?.let{
...//如果不为空执行该语句块
}
如果不为空执行某操作,否则执行某操作
val data = ...
data?.let{
...//如果不为空执行该语句块
} ?: let{
...//如果为空执行该语句块
}
fun test() {
val result = try {
count()
} catch (e: ArithmeticException) {
throw IllegalStateException(e)
}
// Working with result
}
得到类的Class对象
startActivity(Intent(this@MainActivity, TestActivity::class.java))
class User {
inner class Test {
fun getUser(): User {
//返回User
return this@User
}
fun getTest(): Test {
//返回Test
return this@Test
}
}
}
跳出双重循环
val arrays = listOf(1, 2, 3, 4, 5)
loop@ for (i in 0..9) {
for (itemB in arrays) {
if (itemB > 2) {
break@loop
}
Log.d("Main", "itemB:$itemB")
}
}