文章目录
参考郭神的第一行代码第三版第二章以及我自己在项目中的一些积累总结一下Kotlin语法
- 编译型语言:源代码一次性编译成计算器可识别的二进制文件,如c和c++
- 解释型语言:一行行读取编写的源代码,实时解释成计算机可识别的二进制数据再执行,如Python和JavaScript
Java和Kotlin虽然也是先编译后运行,但是编译生成的是特殊的class文件,只有在虚拟机上才能识别,所以两者也属于解释型语言
在AndroidStudio中新建一个File可以编写Kotlin代码了(前提是你先有kotlin的环境)
fun main(){
println("Hello World")
}
变量
- val:用来声明一个不可变的变量
- var:声明一个可变的变量
- 提问:为什么要有val这个关键字?
这样做是为了解决Java中final这个关键字没有被充分利用的问题,因为一个变量是可变的话你不知道会在什么时候被别人无意中修改,产生不可预计的Bug - 什么时候使用val或var呢
永远优先使用val来声明变量,当val没法满足需求再用var,这样程序会更加健壮,更加规范
- 提问:为什么要有val这个关键字?
fun main(){
val a = 10
println("a = " + a )
}
fun main(){
var a = 10
a = a * 10
println("a = " + a )
}
可以看出Kotlin可以自己推导出a的类型,当然也可以自己再定义一下
var a : Int = 10
会发现Int首字母是大写的,这是Kotlin抛弃了基本数据类型,全部使用了对象数据类型,所以java中的所有基本数据类型,在Kotlin中首字母都为大写
Int,Long,Short,Float,Double,Boolean,Char,Byte
函数
fun LargerNumber(a: Int, b:Int): Int{
return max(a,b)
}
语法糖,当函数体只有一行代码时使用,但是结合Kotlin的其他特性,这种写法可以广泛使用
fun LargerNumber(a: Int, b: Int): Int = max(a, b)
因此:在kotlin中没有三目运算符变为了if…else
用法
text = if (text == "test") text else "Unknown"
if条件语句
这里用了value来重新赋值是因为函数的参数无法重新赋值,默认为val
fun LargerNumber(a: Int, b: Int) : Int{
var value = 0
if(a>b){
value = a
}else {
value = b
}
return value
}
简化1:在if分支中最后一行代码可以作为返回值,可以用来直接返回或者赋值给其它变量
fun LargerNumber(a: Int, b: Int): Int {
return if (a > b) {
a
} else {
b
}
}
继续简化:结合之前的语法糖,虽然这里不是一行代码,但是和只有一行代码效果也也一样,只是返回了一个值而已,所以可以用
fun LargerNumber(a: Int, b: Int) = if (a > b) a else b
when条件语句
switch的改进版,在switch中只能支持整形,字符串变量的条件,而且每一个case后都要加一个break,when解决了这些痛点
匹配值->{执行逻辑}
fun getScore(name : String) = when(name){
"Mike" -> 90
"Tom" -> 80
"田哥" ->100
else ->0
}
还可以进行类型匹配
fun checkNumber(num : Number) = when(num){
is Int -> "is int"
is Double -> "is double"
else -> "not anything"
}
还可以不带参数
fun checkNumber(num : Number) = when{
num is Int -> "is int"
num is Double -> "is double"
else -> "not anything"
}
这种写法在匹配多个的时候有用,如开头为Tom的成绩都为80
fun checkNumber(name :String) = when{
name.startsWith("Tom") -> 80
name == "mike" -> 100
else -> 60
}
while循环
a初始值为10,输出9876543210,因为判断完成之后会减一,然后再输出
while (a-->0){
print(a)
}
for-in循环
区间为[1,10]
val range = 1..10
for(i in range){
print(i)
}
区间为[1,10)
val range = 1 until 10
for(i in range)