kotlin自学过程,第一天2023年2月13日

为什么要学Kotlin

download

我想开发一款安卓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/免费下载。新建项目如下图:

微信截图_20230213202214

新建文件:

image-20230213203210187

新学一门语言的第一个代码hello world:

微信截图_20230213203407

fun main(){
    println("Hello, world")
}

Kotlin语法

fun main(){
    println("Hello, world")
}

为例说明:

关键字fun用于声明函数。函数是设计用于执行特定任务的代码块。在上面的示例中,它声明了main()函数。

main()函数是您将在每个 Kotlin 程序中看到的东西。该函数用于执行代码。main()函数大括号内的任何代码都{}将被执行

例如,println()函数在main()函数内部,这意味着将执行此操作。该println()函数用于输出/打印文本,在我们的示例中它将输出“Hello World”。

tips:在 Kotlin 中,代码语句不必以分号 ( ;) 结尾(其他编程语言通常需要分号,例如JavaC++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变量

变量是存储数据值的容器。

要创建变量,请使用varval,并使用等号 ( =) 为其赋值:

fun main(){
    var name = "halo"
    val birthyear = 2023

    println(name)          // Print the value of name
    println(birthyear)     // Print the value of birthyear
}

image-20230213204112426

值得注意的是:kotlin声明一个变量而不赋值,然后再赋值。但这时必须声明变量的类型。

如下:

var name: String
name = "John"
println(name)

注意事项

使用val关键字创建变量时,无法更改/重新分配``值 。

使用 var,可以随时更改值:

那么什么时候使用val

比如希望这个变量不发生改变的时候。相当于其他语言的const关键字。

显示变量

println()可以用在显示变量。”+”符合可以连接两个相同类型的变量,如果变量是数值则相加,如果变量是字符串,则相连。如下:

fun main(){
    var name1 = "halo"
    val name2 = "world"
    println(name1 +' '+name2)
}

image-20230213205152068

变量命名规则

变量可以有一个短名称(如 x 和 y)或更具描述性的名称(age、sum、totalVolume)。

Kotlin 变量的一般规则是:

  • 名称可以包含字母、数字、下划线和美元符号
  • 名称应以字母开头
  • 名称也可以以 $ 和 _ 开头(但我们不会在本教程中使用它)
  • 名称区分大小写(“myVar”和“myvar”是不同的变量)
  • 名称应以小写字母开头,并且不能包含空格
  • 保留字(如 Kotlin 关键字,如varor String)不能用作名称

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

数值

整数类型存储整数,正数或负数,不带小数。有效类型为ByteShortIntLong

浮点类型表示带有小数部分的数字,包含一位或多位小数。有两种类型:FloatDouble

整数类型

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可以存储小数

何时使用FloatDouble,二者区别

浮点值的精度表示该值在小数点后可以有多少位的精度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])
}

image-20230213210943624


运算符

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])
}

image-20230213213013063

[0] 是第一个元素。[1] 是第二个元素,[2] 是第三个元素,等等。

字符串长度

Kotlin 中的 String 是一个对象,它包含可以对字符串执行某些操作的属性和函数,自带找到字符串的长度length函数

fun main(){
    var txt = "AAAAAAAAAWWWWWWWW2sdadag"
    println("该字符的长度是: " + txt.length)
}

微信截图_20230213213233

在字符串中查找字符串

indexOf()函数返回指定文本在字符串(包括空格)中第一次出现的索引(位置):

fun main(){
    var txt = "我有个朋友叫张三!"
    println(txt.indexOf("张三"))  // Outputs 6
}

微信截图_20230213213511

字符串连接

可以在字符串之间使用运算+符将它们相加以生成新字符串。这称为串联

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")

微信截图_20230213213802

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("张三他是个好人!")
    }
}

微信截图_20230213214317


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])
}

微信截图_20230213215544

数组长度

要找出数组有多少个元素,使用数组自动的size属性:

val names = arrayOf("张三", "李四", "刘五")
println(names.size)

For循环

要遍历数组元素,请将forin关键字:

fun main(){
    val names = arrayOf("张三", "李四", "刘五")
    for (x in names) {
        println(x)
    }
}

微信截图_20230213215948

Ranges

使用for循环,还可以 使用“..”创建值范围``:

fun main(){
    for (nums in 1..6) {
        println(nums)
    }
}

微信截图_20230213220228

检查值是否存在

还可以使用in运算符检查范围内是否存在值:

val names = arrayOf("张三", "李四", "刘五")
if ("张三" in names) {
  println("张三在此!")
} else {
  println("张三不在.")
}

微信截图_20230213220433

函数

函数是一段代码,只有在被调用时才会运行

可以将称为参数的数据传递到函数中。

函数用于执行某些操作,它们也称为方法

例如,println()是一个函数。它用于将文本输出/打印到屏幕:

创建自定义的函数

fun myFunction() {
  println("今晚脑子都是kotlin和张三!")
} 

调用函数

现在已经创建了一个函数,可以通过调用来执行它。

要在 Kotlin 中调用函数,请编写函数名称后跟两个括号()

在以下示例中,myFunction()将在调用时打印一些文本(操作):

微信截图_20230213220709

小结

两个小时的学习,过了一遍kotlin的语法。和其他“类C”语言是差不多的,大同小异。明天再学习kotlin的“对象”和一些简单的示例。再后面找些简单的例子再学学。如果APP能跑起来,应该就掌握了一些安卓开发的皮毛了。

自己感觉后面还是要查看一些APP的部件、容器控件、监听器、网络连接,数据库等等,