kotlin自学过程,第一天2023年2月13日
kotlin自学过程,第一天2023年2月13日
ytkz为什么要学Kotlin
我想开发一款安卓APP,所以就想去学学这个语言,主要是不打游戏了,下班之后也闲得慌,闲着也是闲着,所以就去学Kotlin,内卷从我做起。
文章很多内容机翻于w3schools, 有需要的同学可以去它家网站学习:https://www.w3schools.com/KOTLIN/kotlin_intro.php
写这样的文章也是在督促自己保持学习。
简介
什么是kotlin?
Kotlin 是一种现代的、流行的编程语言,由 JetBrains 于 2016 年发布。
它变得非常流行,因为它与Java(目前最流行的编程语言之一)兼容,这意味着 Java 代码(和库)可以在 Kotlin 程序中使用。
为什么使用Kotlin?
- Kotlin 与 Java 完全兼容
- Kotlin 适用于不同的平台(Windows、Mac、Linux、Raspberry Pi 等)
- Kotlin 简洁安全
- Kotlin 易于学习,特别是如果您已经了解 Java
- Kotlin 是免费使用的
- 大社区/支持
Kotlin入门
集成开发环境
使用 IntelliJ,可以从https://www.jetbrains.com/idea/download/免费下载。新建项目如下图:
新建文件:
新学一门语言的第一个代码hello world:
fun main(){
println("Hello, world")
}
Kotlin语法
以
fun main(){
println("Hello, world")
}
为例说明:
关键字fun
用于声明函数。函数是设计用于执行特定任务的代码块。在上面的示例中,它声明了main()
函数。
该main()
函数是您将在每个 Kotlin 程序中看到的东西。该函数用于执行代码。main()
函数大括号内的任何代码都{}
将被执行。
例如,println()
函数在main()
函数内部,这意味着将执行此操作。该println()
函数用于输出/打印文本,在我们的示例中它将输出“Hello World”。
tips:在 Kotlin 中,代码语句不必以分号 ( ;
) 结尾(其他编程语言通常需要分号,例如Java、C++、C#等)。
Kotlin注释
单行注释
单行注释以两个正斜杠 ( //
) 开头。
//
行尾之间的任何文本都会被 Kotlin 忽略(不会被执行)。
此示例在一行代码之前使用单行注释:
// 注释
println("Hello World")
多行注释
多行注释以 开头/*
和结尾*/
。
Kotlin 将忽略/*
和之间的任何文本。*/
本例使用多行注释(一个注释块)来解释代码:
/* The code below will print the words Hello World
to the screen, and it is amazing */
println("Hello World")
Kotlin变量
变量是存储数据值的容器。
要创建变量,请使用var
或val
,并使用等号 ( =
) 为其赋值:
fun main(){
var name = "halo"
val birthyear = 2023
println(name) // Print the value of name
println(birthyear) // Print the value of birthyear
}
值得注意的是:kotlin声明一个变量而不赋值,然后再赋值。但这时必须声明变量的类型。
如下:
var name: String
name = "John"
println(name)
注意事项
使用val
关键字创建变量时,无法更改/重新分配``值 。
使用 var
,可以随时更改值:
那么什么时候使用val
?
比如希望这个变量不发生改变的时候。相当于其他语言的const关键字。
显示变量
println()可以用在显示变量。”+”符合可以连接两个相同类型的变量,如果变量是数值则相加,如果变量是字符串,则相连。如下:
fun main(){
var name1 = "halo"
val name2 = "world"
println(name1 +' '+name2)
}
变量命名规则
变量可以有一个短名称(如 x 和 y)或更具描述性的名称(age、sum、totalVolume)。
Kotlin 变量的一般规则是:
- 名称可以包含字母、数字、下划线和美元符号
- 名称应以字母开头
- 名称也可以以 $ 和 _ 开头(但我们不会在本教程中使用它)
- 名称区分大小写(“myVar”和“myvar”是不同的变量)
- 名称应以小写字母开头,并且不能包含空格
- 保留字(如 Kotlin 关键字,如
var
orString
)不能用作名称
kotlin数据类型
在 Kotlin 中,变量的类型由其值决定:
val myNum = 5 // Int整型
val myDoubleNum = 5.99 // Double浮点类型
val myLetter = 'D' // Char字符
val myBoolean = true // Boolean布尔
val myText = "Hello" // String字符
如果需要,可以指定类型:
val myNum: Int = 5 // Int
val myDoubleNum: Double = 5.99 // Double
val myLetter: Char = 'D' // Char
val myBoolean: Boolean = true // Boolean
val myText: String = "Hello" // String
数值
整数类型存储整数,正数或负数,不带小数。有效类型为Byte
、Short
、Int
、Long
浮点类型表示带有小数部分的数字,包含一位或多位小数。有两种类型:Float
和Double
。
整数类型
Byte
该Byte
数据类型可以存储从 -128 到 127 的整数。相当于是有符号整型8bit数值。该值将在 -128 和 127 之间时,可以使用它代替Int
或其他整数类型来节省内存:
val myNum: Byte = 100
println(myNum)
Short
数据Short
类型可以存储从 -32768 到 32767 的整数:
val myNum: Short = 5000
println(myNum)
Int
数据Int
类型可以存储从-2147483648到2147483647的整数:
val myNum: Int = 100000
println(myNum)
Long
该数据类型可以存储从 -9223372036854775807 到 9223372036854775807 的整数。当不够大以存储值Long
时使用 。Int
或者,可以用“L”结束值:
val myNum: Long = 15000000000L
println(myNum)
Int 和 Long 之间的区别
val myNum1 = 2147483647 // Int
val myNum2 = 2147483648 // Long
浮点类型
浮点类型表示带小数的数字,例如 9.99 或 3.14515。
和数据Float
类型Double
可以存储小数
何时使用Float
或Double
,二者区别
浮点值的精度表示该值在小数点后可以有多少位。的精度Float
只有六七位十进制数字,而Double
变量的精度大约为 15 位。因此,在大多数计算中使用它更安全Double
。
布尔值
数据Boolean
类型 只能取值true
或者false
:
Char
该Char
数据类型用于存储 单个字符。char 值必须用单引号括起来,例如 ‘A’ 或 ‘c’:
val exam: Char = 'A'
println(exam)
值得注意的是是,在Kotlin中不能使用 ASCII 值,来显示(代表)某些字符。
字符串String
数据String
类型用于存储字符序列(文本)。字符串值必须用 双引号括起来:
val myText: String = "Hello World"
println(myText)
数组
数组用于在单个变量中存储多个值,而不是为每个值声明单独的变量。
fun main(){
val names = arrayOf("lihua", "yaoming", "zhangsan")
println(names[0])
}
运算符
Kotlin 将运算符分为以下4组:
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
算术运算符
运算符 | 含义 | 例子 |
---|---|---|
+ | 加 | x+y |
- | 减 | x-y |
* | 乘 | x*y |
/ | 除 | x/y |
% | 取余 | x%y |
++ | 自加 | ++x |
— | 自减 | —x |
赋值运算符
使用赋值运算符 ( =
) 将值10赋给名为x的变量:
var x = 10
加法赋值运算符 ( +=
) 向变量添加一个值:
var x = 10
x += 5 // x等于15
运算符 | 例子 | 相当于 |
---|---|---|
= | x = 5 | x = 5 |
+= | x +=3 | x = x + 3 |
-= | x -=3 | x = x - 3 |
*= | x *=3 | x = x * 3 |
/= | x /=3 | x = x / 3 |
%= | x %+=3 | x = x % 3 |
比较运算符
运算符 | 含义 | 例子 |
---|---|---|
== | 等于 | x == y |
!= | 不等于 | x != y |
> | 大于 | x > y |
< | 小于 | x < y |
>= | 大于或者等于 | x >= y |
<= | 小于或者等于 | x <= y |
逻辑运算符
运算符 | 含义 | 例子 | ||||
---|---|---|---|---|---|---|
&& | 并且 | x < 5 && x>0 | ||||
\ | \ | 或者 | x < 5 \ | \ | x==10 | |
! | 不是 |
字符串
字符串用于存储文本。
一个字符串包含一组用双引号括起来的字符:
var greeting = "Hello"
与Java不同,不必指定变量应该是String
. Kotlin 足够聪明,可以理解上例中的 greeting 变量是 String
。
获取具体的字符
要获取字符串的字符(元素),必须引用方括号 内的索引号。
字符串索引从 0 开始。在下面的示例中,获取的第一个和第三个元素txt
:
fun main(){
val names = "lihua"
println(names[0])
println(names[2])
}
[0] 是第一个元素。[1] 是第二个元素,[2] 是第三个元素,等等。
字符串长度
Kotlin 中的 String 是一个对象,它包含可以对字符串执行某些操作的属性和函数,自带找到字符串的长度length
函数
fun main(){
var txt = "AAAAAAAAAWWWWWWWW2sdadag"
println("该字符的长度是: " + txt.length)
}
在字符串中查找字符串
该indexOf()
函数返回指定文本在字符串(包括空格)中第一次出现的索引(位置):
fun main(){
var txt = "我有个朋友叫张三!"
println(txt.indexOf("张三")) // Outputs 6
}
字符串连接
可以在字符串之间使用运算+
符将它们相加以生成新字符串。这称为串联:
var firstName = "张三"
var lastName = "李四"
println(firstName + " " + lastName)
还可以使用该plus()
函数连接两个字符串:
var firstName = "张三"
var lastName = "李四"
println(firstName.plus(lastName))
字符串模板
var firstName = "张三"
var lastName = "李四"
println("My name is $firstName $lastName")
Booleans布尔值
是,否。常常用在条件、控制语句中。
val isKotlinFun = true
val isFishTasty = false
println(isKotlinFun) // Outputs true
println(isFishTasty) // Outputs false
If … Else
if
语法如下:
if (condition) {
// 运行一些代码
}
例子1:
fun main(){
var 张三 = "张三" // 赋值
if (张三 =="张三") {
println("张三他是个好人!")
}
}
Else
语法
if (condition) {
// 运行一些代码
} else {
// 运行另外一些代码
}
例子2:
fun main(){
var 张三 = "张1三"
if (张三 =="张三") {
println("张三他是个好人!")
}else{
println("张三人品不行!")
}
}
When
符合条件时,运行一些代码。
val day = 4
val result = when (day) {
1 -> "Monday"
2 -> "Tuesday"
3 -> "Wednesday"
4 -> "Thursday"
5 -> "Friday"
6 -> "Saturday"
7 -> "Sunday"
else -> "Invalid day."
}
println(result)
// Outputs "Thursday" (day 4)
表达式when
类似于Java中的switch
语句。
While 循环
只要达到指定的条件,循环就可以执行一段代码。
循环很实用,可以节省时间、减少错误并使代码更具可读性。
var i = 0
while (i < 5) {
println(i)
i++
}
循环中断和继续
该break
语句用于跳出 循环。
这个例子在 i 等于 4 时跳出循环:
var i = 0
while (i < 10) {
println(i)
i++
if (i == 4) {
break
}
}
如果指定条件发生,该continue
语句将中断一次迭代(在循环中),并继续循环中的下一次迭代。
此示例跳过值 4:
var i = 0
while (i < 10) {
if (i == 4) {
i++
continue
}
println(i)
i++}
相当于python中的pass
语句。
数组
数组用于将多个值存储在单个变量中,而不是为每个值创建单独的变量。
要创建数组,请使用该arrayOf()
函数,并将值放在其中以逗号分隔的列表中:
val names = arrayOf("张三", "李四", "刘五")
可以通过引用方括号内的索引号来访问数组元素。
fun main(){
val names = arrayOf("张三", "李四", "刘五")
println(names[0])
}
更改数组元素
fun main(){
val names = arrayOf("张三", "李四", "刘五")
names[0] = "张3"
println(names[0])
}
数组长度
要找出数组有多少个元素,使用数组自动的size
属性:
val names = arrayOf("张三", "李四", "刘五")
println(names.size)
For循环
要遍历数组元素,请将for
和in
关键字:
fun main(){
val names = arrayOf("张三", "李四", "刘五")
for (x in names) {
println(x)
}
}
Ranges
使用for
循环,还可以 使用“..”创建值范围``:
fun main(){
for (nums in 1..6) {
println(nums)
}
}
检查值是否存在
还可以使用in
运算符检查范围内是否存在值:
val names = arrayOf("张三", "李四", "刘五")
if ("张三" in names) {
println("张三在此!")
} else {
println("张三不在.")
}
函数
函数是一段代码,只有在被调用时才会运行。
可以将称为参数的数据传递到函数中。
函数用于执行某些操作,它们也称为方法。
例如,println()
是一个函数。它用于将文本输出/打印到屏幕:
创建自定义的函数
fun myFunction() {
println("今晚脑子都是kotlin和张三!")
}
调用函数
现在已经创建了一个函数,可以通过调用来执行它。
要在 Kotlin 中调用函数,请编写函数名称后跟两个括号()。
在以下示例中,myFunction()
将在调用时打印一些文本(操作):
小结
两个小时的学习,过了一遍kotlin的语法。和其他“类C”语言是差不多的,大同小异。明天再学习kotlin的“对象”和一些简单的示例。再后面找些简单的例子再学学。如果APP能跑起来,应该就掌握了一些安卓开发的皮毛了。
自己感觉后面还是要查看一些APP的部件、容器控件、监听器、网络连接,数据库等等,