文章目录
1丶为什么要学习Kotlin
- (1)Google 在2019年的I/O大会上宣布,Kotlin 已经成为 Android 的第一开发语言。
- (2)Google Play 商店中排名前1000的 App里,有超过 60% 的 App 已使用 Kotlin语言。
- (3)未来提供的官方 API 也将会有优先考虑 Kotlin 版本。
- (4)Android 官网文档的代码已优先显示 Kotlin 版本,官方的视频教程以及一些开源项目也已改成 Kotlin 来实现。
2丶Kotlin 的工作原理
首先,你先要知道 Java语言的运行机制,请阅读 我写的—Java 的运行机制 这篇博客!Kotlin的工作原理其实和Java工作原理一样的。
3丶Kotlin 的优点
- (1)语法更为简介,同样的功能Kotlin 开发要比Java 少 50% 甚至更多。
- (2)增加了许多现代高级语言的语法特性,使得开发效率大大提升。
- (3)几乎杜绝了空指针这个全球崩溃率最高的异常。
- (4)Kotlin 和 Java 是100% 兼容的 Kotlin可以直接调用和使用 Java 编写的代码,也可以无缝使用 Java 第三方开源库。
4、用 Kotlin 输出“Hello World”
(1)创建一个Kotlin编写的 Android工程,步骤如下
(2)代码
Kotlin 每一行代码结尾都不用加分号
fun main(){
println("Hello World")
}
点击小图标,选择Run运行
(3)运行结果
5丶变量
5.1丶语法规则、类型推导机制
Kotlin 支持类型推导机制,所以使用 val、var来声明变量
- 关键字:val
意思:声明一个不可变的变量
val age = 21;
- 关键字:var
意思:声明一个可变的变量
var name = "wangrui"
🔺Kotlin 虽然拥有类型推导机制,但是并不能满足延迟赋值的场景,如下:
所以,就诞生了显式声明变量类型这个东西
Kotlin 完全抛弃了 Java 中的基本数据类型,全部使用了对象数据类型。在 Java 中 int 是关键字,而在 Kotlin 中 Int 变成了一个类,它拥有自己的方法和继承结构。
如图: Java 和 Kotlin 数据类型对照表
学到这里,小伙伴们一定会有疑问
5.2丶为什么要有 val 和 var 这样的设定
- (1)为了解决 Java 中 final 关键字没有被合理使用的问题。
- (2)当项目越来越复杂,参与开发的人越来越多时,你永远不知道一个可变的变量会在什么时候被谁修改了,即使它原本不应该被修改,这就经常会导致出现一些很难排查的问题
5.3丶什么时候用 val,什么时候用var呢?
永远优先使用 val 来声明一个变量,而当 val 没有办法满足你的需求时再使用 var。这样设计出来的程序会更加健壮,也更加符合高质量的编程规范。
6丶函数(普通函数)
6.1丶课前须知
大家阅读之前,要养成把方法理解为函数的习惯。在Kotlin中 主要强调函数,所以我们只要把方法理解为函数即可。其次Kotlin 真的把函数玩的特别强大,希望大家好好学习本节内容!
6.2丶语法规则
- 关键字:fun
6.3丶利用函数求两个数之间的最大值
fun main(){
val num1 = 10;
val num2 = 20;
println(getMax(num1,num2))
}
fun getMax(num1:Int,num2:Int): Int{
return max(num1,num2)
}
运行结果
代码分析:
上面的代码没什么难度,max() 函数是Kotlin 中的内置函数,返回的是两个参数里最大的数。
6.4丶Kotlin 语法糖
概念(很好理解,请用心阅读):当一个函数中只有一行代码时,Kotlin 允许我们不必编写函数体,可以直接将唯一的一行代码写在函数定义的尾部,中间用等号连接即可。
fun getMax(num1: Int,num2: Int): Int = max(num1,num2)
代码分析:
利用:语法糖: ‘{ }’ 大括号去掉了,同时 return 也去掉了。
你以为这样就够简介了吗?不,往下看
fun getMax(num1: Int,num2: Int) = max(num1,num2)
代码分析:
利用:语法糖 + 类型推导机制,前面我们讲 Kotlin 变量 的时候,引入了这个概念,在赋值的时候 Kotlin 会智能推导出右边的类型。这样讲是不是瞬间就明白了上面的这行代码简化,所以我们这里可以直接省略掉返回值类型。
6.5丶总结
好啦,那么 函数(也叫:普通函数) 的基础知识我们就先讲到这里。后面还会有 标准函数、静态函数、扩展函数这些都是属于 Kotlin 的高阶函数,学习要一步一步慢慢来,把这篇的文章好好理解一下,代码好好敲一下再继续学下去!
7丶逻辑控制
7.1丶if 条件语句
if的第一种用法
定义: Kotlin 里 if 的第一种用法相比 Java 语法结构上几乎没有任何区别
题目:求谁的年龄大
fun getData(age1:Int,age2:Int): Int{
var maxAge = 0;
if (age1 > age2){
maxAge = age1
}else{
maxAge = age2
}
return maxAge
}
上面的代码很简单就不分析了,我们继续往下学!
if 的第二种用法
定义: if 语句的每个条件最后一行代码都会作为返回值
利用这个特性,第二次简化代码:
fun getData(age1:Int,age2:Int): Int{
var maxAge = if (age1 > age2){
age1
}else{
age2
}
return maxAge
}
代码分析:
根据 if 第二种用法的定义,就可以将 if 语句返回的值赋值给 maxAge变量。
还可以再利用这个特性,第三次简化代码:
fun getData(age1:Int,age2:Int): Int{
return if (age1 > age2){
age1
}else{
age2
}
}
代码分析:
将 if语句 直接作为 return 的返回值返回。
还记得我们之前将 Kotlin 语法糖吗? 利用这个特性,第四次简化代码:
fun getData(age1:Int,age2:Int): Int = if (age1 > age2) age1 else age2
代码分析:
利用:语法糖 + 类型推导机制 + if新特性
- 省略 返回值类型
- 省略 函数体
7.2、when 语句
when 和 Java 的 switch 有点像,但它远比 switch 强大。
题目: 输入一个人的名字,返回她的座位号
if 解决
fun getData(name: String) = if (name == "张三") {
21
}else if(name == "李四") {
35
}else {
40
}
when 解决
fun getData(name: String) = when(name){
"张三" -> 21
"李四" -> 35
else -> 40
}
代码分析:
when 和 if 一样都是有返回值的,所以可以利用 语法糖 简化上面的代码