本文系列笔记 秉承 复习 和 重头开始 的心态。
变量
在Kotlin中,定义一个变量 只能用 val 和 var
val (value) 等同于 Java 中的常量 (使用 final 修饰符)
var (variable) 真正的变量
Kotlin 有出色的类型推导机制
Kotlin 不用加 [ ; ]
fun main() {
val a = 10//定义一个常量a 赋值10 自动推导为 int
println("a = $a")
}
还可以 显示 声明 变量类型
//显示声明 变量类型 不会再去推导为其他类型
val a0: Int = 10
Kotlin的基本数据类型 变为了 对象(类) ,而Java的基本数据类型 是 关键字
对照表
Java | Kotlin | 说明 |
---|---|---|
int | Int | 整型 |
long | Long | 整型 |
long | Long | 长整型 |
short | Short | 短整型 |
float | Float | 单精度浮点型 |
double | Double | 双精度浮点型 |
boolean | Boolean | 布尔型 |
char | Char | 字节型 |
byte | Byte | 字节型 |
说了Java 中 final 的使用的不规范
让在Kotlin中优先使用val ,不得不用var了再用var
函数
Java中习惯叫方法,Kotlin中习惯叫函数
Kotlin中函数的语法定义规则
//定义一个函数 函数解释:返回值类型为Int 有两个参都是Int类型
fun methodName(param1: Int, param2: Int): Int {
return 0
}
//定义一个有意义函数 找出两个值中的最大值
fun largerNumber(num1: Int, num2: Int): Int {
return max(num1, num1)//max()为Kotlin的内置函数
}
Kotlin语法糖 函数的简化
//语法糖简化 函数只有一行代码时
fun largerNumber0(num1: Int, num2: Int): Int = max(num1, num2)
//类型推导机制 还可以再简化
fun largerNumber1(num1: Int, num2: Int) = max(num1, num2)
逻辑运算符
程序的执行语句主要分3种:顺序语句,条件语句和循环语句。
- if条件语句
// if 语句
fun largerNumber2(num1: Int, num2: Int): Int {
var value = 0
if (num1 > num2) {
value = num1
} else {
value = num2
}
return value
}
Kotlin中的if和Java中的if用法完全一致,只不过Kotlin的if是可以直接有返回值的,相当于一个函数了。并且是可以简写的。
fun largerNumber3(num1: Int, num2: Int): Int {
var value = 0
value = if (num1 > num2) {
num1
} else {
num2
}
return value
}
还可以再简化
fun largerNumber4(num1: Int,num2: Int):Int{
return if (num1>num2){
num1
}else{
num2
}
}
还可再简 (当一个函数只有一行代码时,可以省略函数体部分,直接将这一行代码使用 等号 连在函数定义的尾部)
fun largerNumber5(num1: Int,num2: Int) = if (num1>num2){
num1
}else{
num2
}
再简 (最终版)
fun largerNmuber6(num1: Int,num2: Int) = if (num1>num2) num1 else num2
[个人看法] 其实我觉得这些写法在Java中也经常写,这里只是为了演示Kotlin的语法而举例出来的。
- when 条件语句
Kotlin中的 when 有点类似于 Java 中的 switch ,但是比switch牛逼很多。
//用 if 写 when
fun getScore(name: String) = if (name == "Tome"){
86
}else if (name=="Jim"){
77
}else if (name=="Jack"){
9 了。5
}else if (name=="Lily"){
100
}else{
0
}
when 语句允许传入一个任意类型的参数,然后可以在 when 的结构体中定义一系列的条件,格式是 #[ 匹配值 -> {执行逻辑} ] 也就是下文的 #[ “Tome” -> 86 ]当你的执行逻辑只有一行时,可以忽略 #[ { } ]
//直接写when
fun getScore0(name: String) = when (name) {
"Tome" -> 86
"Jim" -> 77
"Jack" -> 9 了。5
"Lily" -> 100
else -> 0
}
除了精确匹配外,when 还可以 类型匹配
//类型匹配
fun checkNumber(num: Number) {
when (num) {
is Int -> print("number is Int")
is Double -> print("number is Double")
else -> print("number not support")
}
}
其中的 is 关键字 相当于 Java 中的 instanceof 关键字
Number 是 Kotlin 内置的一个抽象类,像Int,Long,Float,Double等与数字相关的类都是它的子类。
when 还有一种不带参数的用法,不常用,这里只是演示一下。看一下强悍的拓展性
//when不带参数的写法
fun getScore1(name: String) = when{
name == "Tome" -> 86
name == "Jim" -> 77
name == "Jack" -> 9 了。5
name == "Lily" -> 100
else -> 0
}
PS:Kotlin中 判断 字符串 是否相等 可以直接 用 == 而非 Java中的 equals()
某些情况下,带参数的 when 是无法实现的,必须要用到不带参的 when 才能实现
//不带参的另一种场景
fun getScore2(name:String) = when{
name.startsWith("Tom") ->86
name == "Jim" -> 77
name == "Jack" -> 9 了。5
name == "Lily" -> 100
else -> 0
}
- while 循环语句
Kotlin 的 while 和 Java 的 while 没有任何区别,所以郭神没将[狗头] 我这里放出来给大家看看
//while循环
fun testWhile() {
var num = 0
while (num < 100) {
num++
println("now number is = $num")
}
}
- for 循环语句
Java中的 for-i 循环在 Kotlin 中舍弃了 ,
而 for-each 在 Kotlin 中被大幅强化 ,
变成了现在 Kotlin 中的 for-in 循环 。
在将 for-in 循环前,需要引入一个 区间 的概念
//两端闭区间 数学表达:[0,10]
val range = 0..10
上面代码可以理解为 一个 包含 0~10 的一个 数组
在 Kotlin 中称为 两端闭区间 其中 … 就是关键字
接下来 遍历一下这个两端闭区间
fun testFor() {
for (i in 0..10) {
println("now number is = $i")
}
}
4-1. until 关键字
有两端闭区间 肯定也有 单端闭区间
Kotlin 中 用 until 关键字 来创建一个左闭右开的区间
//左闭右开区间 数学表达:[0,10)
val range0 = 0 until 10
所以这里表示的就是 0~9 了。
//左闭右开
for (i in 0 until 10) {
println("now number is = $i")
}
4-2. step 关键字
默认情况下,for-in 循环每次执行区间范围递增1 类似于Java中 for-i循环的 i++ 。如果想跳过某些元素,请使用 step 关键字
//i += 2
for (i in 0 until 10 step 2){
println("now number is = $i")
}
如上代码 使用了 step 2 那么 输出的就是 0,2,4,6,8 了。
同理 step 3 输出的就是 0,3,6,9 了。
4-3. downTo 关键字
上面 学到的… 和 until 只能 左 < 右 ,所以都是升序,那么降序呢?这里就引出了 降序区间的概念 ,使用 downTo 关键字
//降序
for (i in 10 downTo 0) {
println("now number is = $i")
}