跟郭神学Kotlin(第三行学习笔记01)

本文系列笔记 秉承 复习 和 重头开始 的心态。

变量

在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的基本数据类型 是 关键字

对照表

JavaKotlin说明
intInt整型
longLong整型
longLong长整型
shortShort短整型
floatFloat单精度浮点型
doubleDouble双精度浮点型
booleanBoolean布尔型
charChar字节型
byteByte字节型

说了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种:顺序语句,条件语句和循环语句。

  1. 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的语法而举例出来的。

  1. 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
}
  1. while 循环语句

Kotlin 的 while 和 Java 的 while 没有任何区别,所以郭神没将[狗头] 我这里放出来给大家看看

//while循环
fun testWhile() {
    var num = 0
    while (num < 100) {
        num++
        println("now number is = $num")
    }
}
  1. 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")
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页