只读变量
要声明可修改变量,使用var关键字。
要声明只读变量,使用val关键字。
//可修改变量
var name:String = "hello world"
name = "hello china"
//只读变量
val age:Int= 20
age = 30 //这行会报错,因为val声明为只读
类型推断
对于已声明并赋值的变量,kotlin允许省略类型定义。比如上面的代码可以修改为:
var name = "hello world"
val a = 5
只读变量并非绝对只读。
编译时常量只能在函数之外定义 ,因为编译时常量必须在编译时赋值,而函数都是在运行时才调用,函数内的变量也是在运行时复制,编译时常量要在这些变量赋值前就存在。
编译时常量只能是常见的基本数据类型:String,Int,Double,Float,Long,Short,Byte,Char,Boolean
const val MAX = 200
fun main() {
const val MIN = 2//报错
}
java有两种数据类型:引用类型与基本数据类型。
kotlin只提供引用类型这一种数据类型,处于更高性能的需要,kotlin编译器会在java字节码中改用基本数据类型。
我们可以在kotlin字节码代码中查,双击shift选用show kotlin bytecode
if/else if表达式与java是一样的
range表达式
in A..B,in关键字用来检查某个值是否在指定范围之内,in后面可以接list,set等,!in 表示不在这个指定范围。
val age = 14
if (age in 0..18){
println("未成年")
}else if (age in 18..60){
println("中年")
}else{
println("老年")
}
when表达式
允许你编写条件式,在某个条件满足时,执行对应的代码。
只要代码包含else if分支,都建议改用when表达式。
val school = "小学"
val level = when(school){
"学前班" -> "幼儿"
"小学" -> "少儿"
"大学" -> "青少年"
else ->{
println("未知")
}
}
println(level)
模板支持在字符串的引号内放入变量值
还支持字符串里计算表达式的值并插入结果,添加在${}中的任何表达式,都会作为字符串的一部分求值。
val origin = "Jack"
val dest = "Rose"
println("$origin love $dest")
//fun是函数的关键字,如果不声明private,默认是public,这段函数意思为入参是一个int和一个string,返回是一个string
//如果不打算传入值参,可以预先给参数指定默认值
//比如在插件化框架中的startActivity有好多的重载函数,这时候可以用kotlin的特性,具名函数,
//直接调用的时候为 doSomething(name = "2",age = 222),这时候参数顺序都可以随意写
private fun doSomething(age:Int = 2,name:String):String{
return "i do"
}
Unit函数
不是所有的函数都有返回值,kotlin中没有返回指的函数叫Unit函数,也就是说他们的返回类型是Unit。在kotlin之前,函数不返回任何东西用void描述,意思是“没有返回类型,忽略它”,也就是说如果函数不返回任何东西,就忽略类型。但是void这种解决方案无法解释现代语言的一个重要特性,泛型!
Nothing类型
TODO函数的任务就是抛出异常,返回Nothing类型。
fun main() {
TODO()
}
Exception in thread "main" kotlin.NotImplementedError: An operation is not implemented.
at study01.NimingfuncKt.main(Nimingfunc.kt:5)
at study01.NimingfuncKt.main(Nimingfunc.kt)
kotlin可以使用空格和特殊字符对函数命名,不过函数名要用一对反引号括起来
为了支持kotlin和java互操作,而kotlin和java各自却有着不同的保留关键字不能作为函数名,使用反引号括住函数名就能避免任何冲突。
最后编辑于 :2022.04.24 16:36:02
©著作权归作者所有,转载或内容合作请联系作者 平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。