Hmily
文章21
标签13
分类4
编程语言之Kotlin.1020

编程语言之Kotlin.1020

总是啥都想学,但又啥都学不精

最早接触编程是在2018年,我刚上初中的时候,那时候接触的是中文编译语言—易语言
接着是C/C++(学了点皮毛 到现在忘干净了)
接着到高中玩电脑时间就少了.就没在钻研这些了。

发现更多还是写Android程序实用些,想学 于是就在java和kotlin中选择了后者。
只是突然想学Kotlin了,脑子一热谁知道能坚持多久呢…

不过有点编程思维 学会一门语言,在接触其他编程语言还是较为容易上手的。(我没有)


文中摘要部分来自书籍 — 《第一行代码(第3版)》 (郭霖)

1、变量

val(value的简写)用来声明一个不可变的变量,这种变量在初始赋值之后就再也不能重新赋 值,对应Java中的final变量。

var(variable的简写)用来声明一个可变的变量,这种变量在初始赋值之后仍然可以再被重新 赋值,对应Java中的非final变量。

1
2
3
4
5
fun main() {
val a: Int = 10
a = a * 10
println("a = " + a)
}

会报错 因为val不可变的变量
正确是改成var可变的变量

1
2
3
4
5
fun main() {
var a: Int = 10
a = a * 10
println("a = " + a)
}
Kotlin对象数据类 Int Long Short Float Double Boolean Char Byte
数据类型说明 整型 长整型 短整型 单精度浮点型 双精度浮点型 布尔型 字符型 字节型

2.1、函数
1
2
3
4
5
6
7
8
9
10
11
fun main() {
val a=7
val b=10
val c= laegernumber(7,10)
//val c= laegernumber(a,b)
println("c = " + c)
}

fun laegernumber(num1:Int, num2:Int): Int{
return max(num1,num2)
}

Kotlin中必须先写 laegenumber() 函数 才能在main函数中调用
(num1:Int, num2:Int)中 num相当于参数名这个可随意更改 重要的是数据类型

Kotlin函数的语法糖

largerNumber()函数就只有 一行代码,于是可以将代码简化成如下形式:
return关键字也可以省略了,等号足以表达返回值的意思。
可以理解为把”{return}”是一个集群,代码少 直接上“=”

1
fun largerNumber(num1: Int, num2: Int): Int = max(num1, num2)

Kotlin出色的类型推导机制

由于max()函数返回的是一个 Int值,而我们在largerNumber()函数的尾部又使用等号连接了max()函数,因此Kotlin可 以推导出largerNumber()函数返回的必然也是一个Int值,这样就不用再显式地声明返回值 类型了,代码可以进一步简化成如下形式:

1
fun largerNumber(num1: Int, num2: Int) = max(num1, num2)
2.2、if条件语句
1
2
3
4
5
6
7
8
9
10
//1.直接给var p=0 赋值 再return
fun laegernumber(a:Int,b:Int):Int{
var p=0 //这里var有重新赋值的意思
if (a>b) {
p=a
} else {
p=b
}
return p
}

Kotlin中的if语句相比于Java有一个额外的功能,它是可以有返回值的,返回值就是if语句每
一个条件中最后一行代码的返回值。因此,上述代码就可以简化成如下形式:

1
2
3
4
5
6
7
8
9
//2.直接var p=if() 再return
fun laegernumber(a:Int,b:Int):Int{
val p = if (a>b) { ////这里val直接等于 不存在二次赋值
a
} else {
b
}
return p
}

你会发现p其实也是一个多余的变量,我们可以直接将if语句返回, 这样代码将会变得更加精简,如下所示:

1
2
3
4
5
6
7
8
//3.直接 return if()
fun laegernumber(a:Int,b:Int):Int{
return if (a>b) {
a
} else {
b
}
}

回顾一下语法糖,当一个函数只有一行代码时,可以省略函数体部分,直接将这一 行代码使用等号串连在函数定义的尾部。虽然上述代码中的largerNumber()函数不止只有一 行代码,但是它和只有一行代码的作用是相同的,只是返回了一下if语句的返回值而已,符合 该语法糖的使用条件。那么我们就可以将代码进一步精简:

1
2
3
4
5
6
//4.语法糖 省略函数体部分 在函数定义尾部加等号
fun laegernumber(a:Int,b:Int)= if (a>b) {
a
} else {
b
}

前面我之所以说这个语法糖非常重要,就是因为它除了可以应用于函数只有一行代码的情况, 还可以结合Kotlin的很多语法来使用,所以它的应用场景非常广泛。 当然,如果你愿意,还可以将上述代码再精简一下,直接压缩成一行代码:

1
2
//5.只有一个函数 直接压缩成一行代码
fun laegernumber(a:Int,b:Int)= if (a>b) a else b

总结:

1.直接给var p=0 赋值 再return
2.直接var p=if() 再return
3.直接 return if()
4.语法糖 省略函数体部分 在函数定义尾部加等号
5.只有一个函数 直接压缩成一行代码

2.3、when条件语句

if语句

在Kotlin中,== 用于比较两个值是否相等,而 = 是用于赋值的运算符。当你想检查 name 是否与特定字符串相等时,应该使用 ==。例如,name == "Tom" 是在检查 name 是否等于 "Tom"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
fun main(){
val a =7
val b =10
val c = "Tom"
val d = getScore(c)
println("c="+d)
println("c=$d")

}



fun getScore(name: String) = if (name == "Tom") {
86
} else if (name == "Jim") {
77
} else {
0
}

when语句

when语句允许传入一个任意类型的参数,然后可以在when的结构体中定义一系列的条件,

格式 是: 匹配值 -> { 执行逻辑 }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//一种
fun getScore(name: String)=when(name){
"Tom" -> 86
else ->0
}
//二种 将判断表达式写在when的结构体中
//when语句的基本用法就是这些,但其实when语句还有一种不带参数的用法,虽然这种用法可能 不太常用,但有的时候却能发挥很强的扩展性。 拿刚才的getScore()函数举例,如果我们不在when语句中传入参数的话,还可以这么写:
fun getScore(name: String)=when{
name == "Tom"-> 100
else ->0
}


fun getScore(name: String) = if (name == "Tom") 86 else 0

is关键字就是类型匹配的核心,它相当于Java中的instanceof关键字。由于 checkNumber()函数接收一个Number类型的参数,这是Kotlin内置的一个抽象类,像Int、 Long、Float、Double等与数字相关的类都是它的子类,所以这里就可以使用类型匹配来判断传入的参数到底属于什么类型,如果是Int型或Double型,就将该类型打印出来,否则就打 印不支持该参数的类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fun main(){
val b =7
val t=12345678900

checkNumber(t)

}

fun checkNumber(num: Number) {
when (num) {
is Int -> println("number is Int")
is Double -> println("number is Double")
else -> println("number not support")
}
}
2.3、循环语句

打印俩写法

1
2
println("c="+d)
println("c=$d")

函数记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//01
fun laegernumber(num1:Int, num2:Int): Int{
return max(num1,num2)
}

//02
fun getScore(name: String)=when(name){
"Tom" -> 86
else ->0
}

//03 检查Number的类型
fun checknumber(num: Number){
when(num){
is Long -> println("Long")
}
}
//04用于检查字符串是否以指定的前缀开始
name.startsWith("Tom") -> 86

wx.jpg

本文作者:Hmily
本文链接:https://www.hmily.ren/2024/10/20/Kotlin.1020/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
×
灯笼特效