由于在学习JetPack的时候,很多示例,以及sunflower、JetPack的Compose等等都是kotlin,由此开始学习kotlin。
与java相似的就不记录了,提高效率
目录
1.声明变量
2.类型推断
3.编译时常量
4.查看字节码
5.数据类型
6.条件表达式
7.函数头
8.函数参数
9.反引号中的函数名
10.匿名函数
11.高阶函数
1.声明变量
变量声明是跟java非常不同的。java写法: int age = 5;
其中变量声明关键字分为var,val
var:声明可修改变量
val:声明只读变量(目前我知道不是绝对意义上的不可修改,还不知道为什么,后续学习补充)
2.类型推断
类型推断:对已经声明并且复制的变量,允许省略类型,例如:
var age = 5
直接赋值的,咱们可以不用给类型,kotlin会根据咱们给的值来判断类型。
3.编译时常量
const val MAX = 1
const是编译时的关键字,注意:此关键字只能放在函数外。我觉得也挺好理解的,这是编译时就声明好了的常量,而函数内的只有运行到的时候才会进行一个声明,我的理解就是运行时常量的一个感觉,哈哈哈
4.查看字节码
按两次shift,搜索show kotlin就可以出现
5.数据类型
java数据类型:引用数据类型和基本数据类型
kotlin只有一个引用类型,kotlin自己自动会去转成基本数据类型。
6.条件表达式
ifelse就不说了,与java差不多
range表达式:
val age = 24
if(age in 1..4) {
println("幼儿")
} else if (age in 4..10) {
println("孩童")
} else {
println("或许是个人吧")
}
运行结果:或许是个人吧
in A..B 某个值是否在指定(A-B)的范围内
when表达式:
val age = 24
val level:Any = when(age) {
in 1..4 -> "幼儿"
in 4..10 -> "孩童"
else -> "你是我的神"
}
println("$age -> $level")
运行结果:24 -> 你是我的神
我把上边range的表达式放在了when表达式,配合一起用,学习起来更快,哈哈哈
7.函数头
8.函数参数
默认传参:
fun fix(name:String, age:Int = 2)
此时我们调用fix函数可以只传一个name,age默认为2。fix("泡沫")
具名传参:
fun main() {
fix(age = 4, name = "Jack")
}
此时咱们把age,name等于啥连名称都写出来了,就可以无序的填写参数
9.反引号中的函数名
public class MyJava {
public static void is() {
}
}
fun main(){
MyJava.`is`()
}
咱们调用java里的方法时,java里的方法命名有些在kotlin中时关键字、有冲突。这个时候用反引号就可以解决冲突问题。
10.匿名函数
定义时不给其命名的函数,例如:
val blessingNewYear:() -> String = {
val holiday = "new year."
"happy $holiday"
}
println(blessingNewYear())
运行结果:happy new year.
其中可以看出返回值是String,而我并没有写return。这是因为lambda,会默认把最后一行当作返回,挺强大的,挺有意思的!
11.高阶函数
fun main(){
val meilidepaomo:(String, Int) -> String = {goodsName, hour ->
val currentYear : Int = 2007
"${currentYear}年, 双11${goodsName}的促销事件剩余${hour}小时"
}
showOnBoard("安慕希", meilidepaomo)
}
private fun showOnBoard(goodsName:String, showdowns:(String, Int) -> String) {
val hour : Int = 6
println(showdowns(goodsName, hour))
}
运行结果:2007年, 双11安慕希的促销事件剩余6小时
注意点是,kotlin可以在参数中传入一个函数类型,比如showOnBoard中的showdowns,传入之后我在println中调用了它。
好了,很愉快的结束了今天的学习,今后也要好好加油!!!!