前言:17年的时候第一次接触了kotlin,中途断断续续地用着。今年来到新公司,刚好项目中有大量的kotlin代码,虽然对kotlin的用法有一定了解,但是要在组内进行分享,所以想借此机会对kotlin的知识点进行整理,加深印象,方便后续查看。
1、整数
kotlin中共提供了四种整数类型,分别为Byte、Short、Int和Long。
类型 | 大小 | 最小值 | 最大值 |
---|---|---|---|
Byte | 8 | -128 | 127 |
Short | 16 | -32768 | 32767 |
Int | 32 | -2,147,483,648 | 2,147,483,647 |
Long | 64 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
定义变量时,如果初始化值没有超过Int类型的最大值,则会自动推断为Int型。如果超过则推断为Long型,如果要显式定义为Long型,则在末尾加上“L”即可。
2、浮点数
kotlin中的浮点数由Float和Double两种类型组成。
类型 | 大小 | 有效数字比特数 | 指数比特数 | 十进制位数 |
---|---|---|---|---|
Float | 32 | 24 | 8 | 6-7 |
Double | 64 | 53 | 11 | 15-16 |
当给一个变量设置初始化值为小数时,默认是Double类型,如果要使它为Float类型,则需要在末尾加上“f”或“F”后缀。
3、显式转换
在kotlin中是不支持较小的类型不能隐式转换为较大的类型。
var a: Int = 2
var b: Long = a //这样会报错
var b: Long = a.toLong() //这样写才正确,必须用显式转换
每个数字类型支持如下的转换:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
4、字符串
kotlin中字符串用String类型表示,与java一样字符串是不可变的。我们可以用索引运算符来访问:s[i],也可以用for循环对其进行遍历。
for (c in str) {
println(c)
}
平时我们可以用“+”操作符来连接字符串与其他类型值,但是要求表达式的第一个元素是字符串,否则就会报错。
var str = 1 + "打印" //报错
var str = "打印" + 1 //正确
当然除了上面这种方法外,kotlin还支持字符串模板,即字符串字面值可以包含模板表达式 ,会求值并把结果合并到字符串中。 模板表达式以美元符($)开头。
var a: Int = 2
var str = "打印a = $a" / /输出结果:“打印a = 2”
或
var str = "打印a = ${a + a}" / /输出结果:“打印a = 4” //用“{}”花括号括起来的表达式
如果想输出一个原始字符串,即保留字符串原来格式的,用三个引号(""")括起来
var str = """
我是一个粉刷匠
粉刷能力强
"""
print(str) //输出结果:我是一个粉刷匠
粉刷能力强
val : 定义只读局部变量,只能进行一次赋值
val a: Int = 3 //直接赋值,不赋值会报错
或
val a = 3 //赋值后可省略类型,不赋值会报错
总结:首次定义必须赋值
参数类型可以省略
后续无法再次赋值
var :可多次赋值变量
var a: Int = 1 //必须赋值,参数类型可省略
a = 5 //可多次赋值
总结:首次定义必须赋值
参数类型可以省略
后续可以再次赋值
(1)函数定义方式
fun sum(a: Int, b: Int, c: Int): Int {
return a + b + c
} //带返回值的
fun sum(a: Int, b: Int, c: Int): Unit {
print(a + b + c)
} //不带返回值的,Unit 是一种只有一个值——Unit 的类型,这个值不需要显式返回,可以省略
(2)带默认参数的函数
在kotlin中可以在定义函数时,设置默认参数,即给参数赋一个默认值,后续调用方法时如果没有传这个参数的值,那么这个参数的值还是原来设置的默认值。
//例如
fun sum(a: Int, b: Int = 6, c: Int): Int {
return a + b + c
}
fun main(args: Array<String>) {
print(sum(2, c = 4)) //输出结果:12,即 2+6+4
}
注意点:当一个函数调用混用位置参数与命名参数时,所有位置参数都要放在第一个命名参数之前。这里所说的位置参数指的就是可以直接给值的类似上面的a,命名参数是”参数名=值“形式,类似c。举个栗子:print(sum(2, c = 4))这样写是ok的,2是a的值,b不赋值用默认值,c赋值4。如果是print(sum(2, b = 3, 4)),这样写就报错了,效果如下
错误信息:不允许混合名称和位置参数。也就是说它不能识别你这个4是传给谁的,如果改为print(sum(2, b = 3, c = 4))就不会有问题了。
(3)单表达式函数
如果函数只返回一个表达式,可以省略花括号”{ }“,直接”=“后返回。
//例如
fun sum(a: Int): Int = a + 1
(4)可变数量的参数
可变数量参数定义方式是在参数定义前面加上***“vararg”***即可。在kotlin中使用可变数量参数不像java一样,需要将可变数量参数作为方法里参数列表的最后一个参数,可以放在任意位置。
fun method(vararg args: Int){
for (it in args){
println("打印:$it")
}
}
fun main(args: Array<String>) {
method(1,2,3,4,5) //打印结果为:打印:1 打印:2 打印:3 打印:4 打印:5
}
如果该函数不止一个可变数量参数,还有其他参数并且在可变数量参数以后的,就要用命名参数了。
fun method(vararg args: Int, a: Int){
for (it in args){
println("打印:$it")
}
}
fun main(args: Array<String>) {
method(1,2,3,4,5,a = 6) //这里的参数a传参时,必须用“参数名 = 值”方式传递
}
总结:以上主要介绍了kotlin中数据基本类型、变量定义和函数定义的一些内容,为了避免篇幅过长,后面的内容将分几篇文章来发布。