当前位置:网站首页>第一行代码(第三版)学习笔记
第一行代码(第三版)学习笔记
2022-06-30 06:49:00 【陈壮实的编程生活】
文章目录
Android是以前学习的知识,本人非常热爱android开发,所以即使现在也偶尔看看相关技术。了解到Android现在多用Kotlin开发,故利用闲暇看看《第一行代码》(第3版)kotlin版。
本博客记录一下在Android开发中,Kotlin和Java不同之处,如有不当,还请各位指出。
第2章 快速入门Kotlin编程
2.1 kotlin取代Java成为Android第一开发语言的原因
(1)Kotlin语法简洁,同样功能,kotlin可能会比java减少50%的代码量;
(2)语法更加高级,使开发效率提升;
(3)kotlin在语言安全性上下了工夫,几乎杜绝了空指针这个全球崩溃率最高的异常;
(4)与Java100%兼容,使得Kotlin可以直接调用Java编写的代码,可以无缝使用Java三方库。
2.2 如何运行Kotlin代码
注:在线kotlin编程网址
https://try.kotlinlang.org
2.3 编程之本: 变量和函数
2.3.1 变量
(1)val: 申明一个不可变的变量,这种变量在初始赋值后就不能重新赋值了,对应Java中的final变量;
(2)var: 申明一个可变的变量。
(3)Kotlin的推导机制与显示声明类型
推导机制:
fun main() {
val a = 10 //会自动推导a为Int型
println("a = " + a)
}
但如果先申明变量,后面再来赋值,则要进行显示声明类型,如:
val a: Int = 10
(4)Java与Kotlin基本类型对照表
如果你学过Java 并且足够细心的话,你可能发现了Kotlin中Int的首字母是大写的,而Java 中int的首字母是小写的。不要小看这一个字母大小写的差距,这表示Kotlin完全抛弃了Java 中的基本数据类型,全部使用了对象数据类型。在Java 中int是关键字,而在Kotlin中Int变成了一
个类,它拥有自己的方法和继承结构。
2.3.2 函数
函数的申明如下:
fun largerNumber(num1: Int, num2: Int): Int {
return max(num1, num2)
}
另:
当一个函数中只有一行代码时,Kotlin允许我们不必编写函数体,可以直接将唯一的一行代码写在函数定义的尾部,中间用等号连接即可。比如我们刚才编写的largerNumber()函数就只有一行代码,于是可以将代码简化成如下形式:
fun largerNumber(num1: Int, num2: Int): Int = max(num1, num2)
由于max()函数返回的是一个Int值,而我们在largerNumber()函数的尾部又使用等号连接了max()函数,因此Kotlin可以推导出largerNumber()函数返回的必然也是一个Int值,这样就不用再显式地声明返回值类型了,代码可以进一步简化成如下形式:
fun largerNumber(num1: Int, num2: Int) = max(num1, num2)
2.4 程序的逻辑控制
2.4.1 if语句
Kotli n中的if语句和Java 中的if语句几乎没有任何区别,但kotlin中可以通过语法糖进行简化,如:
fun largerNumber(num1: Int, num2: Int): Int {
var value = 0
if (num1 > num2) {
value = num1
} else {
value = num2
}
return value
}
可以简化为:
val value = if (num1 > num2) {
num1
} else {
num2
}
return value
}
进一步简化:
fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) {
num1
} else {
num2
}
再进一步:
fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) num1 else num2
2.4.2 when条件语句
Kotlin中的when语句有点类似于Java 中的switch语句,但它又远
比switch语句强大得多。
输入一个学生的姓名,返回该学生考试的分数, 如果用if语句写,如下:
fun getScore(name: String) = if (name == "Tom") {
86
} else if (name == "Jim") {
77
} else if (name == "Jack") {
95
} else if (name == "Lily") {
100
} else {
0
}
使用when写,更简单,如下:
fun getScore(name: String) = when (name) {
"Tom" -> 86
"Jim" -> 77
"Jack" -> 95
"Lily" -> 100
else -> 0
}
也可以写成无参数形式:
fun getScore(name: String) = when {
name.startsWith("Tom") -> 86
name == "Jim" -> 77
else -> 0
}
注意,Kotlin中判断字符串或对象是否相等可以直接使用==关键字,而不用像Java 那样调用equals()方法。
when的特点:
(1)when语句和if语句一样,也是可以有返回值的,因此我们仍然可以使用单行代码函数的语法糖;
(2)when语句允许传入一个任意类型的参数,然后可以在when的结构体中定义一系列的条件,格式是:
匹配值 -> { 执行逻辑 }
(3)除了精确匹配之外,when语句还允许进行类型匹配,如下:
fun checkNumber(num: Number) {
when (num) {
is Int -> println("number is Int")
is Double -> println("number is Double")
else -> println("number not support")
}
}
2.4.3 循环语句
(1)while循环
其中while循环不管是在语法还是使用技巧上都和Java 中的while循环没有任何区别。
(2)for循环
边栏推荐
- Why does ETL often become ELT or even let?
- 基础刷题(一)
- RT thread Kernel Implementation (II): critical area, object container
- Ls1028 manual
- Vscode returns the previous cursor (previous browse position)
- RT thread migration to s5p4418 (IV): thread synchronization
- Go installation and configuration (1)
- InnoDB engine in MySQL
- Problems and solutions of creating topic messages in ROS
- oracle
猜你喜欢
随机推荐
KEIL - 下载调试出现“TRACE HW not present”
Never forget the original intention, and be lazy if you can: C # operate word files
Set in set (III)
Bat usage details 2
Several C language implementations
ROS system problem: rosdep init
SOC project AHB_ SD_ Host controller design
Keil - the "trace HW not present" appears during download debugging
1.5 - logical operation
HuaWei满级大牛首次分享出这份598页网络协议全彩手册
程序猿入门攻略(十一)——结构体
leetcode:98. 验证二叉搜索树
不忘初心,能偷懒就偷懒:C#操作Word文件
Four ways to create multithreads
1.7 - CPU performance indicators
1.6 - CPU composition
InnoDB engine in MySQL
File transfer protocol, FTP file sharing server
Centos8 install redis
Combat simulation system data









