快速简单入门Kotlin——基础语法(第一天)

本人情况:学习安卓开发一段时间,主要集中在使用Java进行基础开发。随着学习深入,意识到安卓开发不仅仅局限于Java,还需要学习Kotlin语言------Google官方推荐的新语言,未来还会学习比如Jetpack Compose等新的开发框架。为了更好地跟进这些变化,我决定在这里总结自己的学习进展。

本文将简单介绍Kotlin的特点、语法基础、控制流和函数变量等内容,希望能快速掌握这门语言的基础知识。当然,学习Kotlin,最好需要Java语言基础,这两者密不可分。


Kotlin的特点与历史

1. Kotlin 特点

简洁与易读性:Kotlin 比 Java 更简洁,能减少代码量,避免冗余,提供了更加简洁和清晰的语法。比如,它不需要像 Java 一样定义大量的 getter 和 setter 方法。

互操作性:Kotlin 与 Java 完全兼容,可以无缝地与现有的 Java 代码进行交互。你可以在 Kotlin 中调用 Java 类库,也可以在 Java 中使用 Kotlin 编写的代码。

空安全:Kotlin 的空安全特性帮助避免了空指针异常(NullPointerException)。通过类型系统,Kotlin 强制要求开发者显式处理可能为空的变量,这减少了很多潜在的运行时错误。

扩展函数:Kotlin 支持扩展函数,可以在不修改现有类的情况下,给类添加新的方法。这使得开发者能够增强库或框架的功能,而无需继承或修改原始类。

Lambda 表达式与函数式编程支持:Kotlin 提供了对函数式编程风格的支持,支持 Lambda 表达式、高阶函数、集合操作等,使得开发者能够写出更简洁和灵活的代码。

类型推导:Kotlin 提供强大的类型推导机制,开发者无需显式指定类型,编译器会自动推断变量类型,简化了代码的书写。

2. Kotlin 历史

创建背景:Kotlin 由 JetBrains 团队于 2011 年首次发布,旨在解决 Java 编程语言中的一些痛点,特别是在开发现代应用时所面临的繁琐代码和复杂性。

2017 年成为官方安卓开发语言:Kotlin 的一个重要里程碑是在 2017 年,Google 宣布将 Kotlin 作为 Android 开发的官方语言。这标志着 Kotlin 得到了广泛的认可和应用,尤其是在安卓开发社区中。

支持多平台开发:Kotlin 不仅适用于安卓开发,随着 Kotlin Multiplatform(KMP)项目的发展,Kotlin 也逐渐支持跨平台开发,可以用于 iOS、Web 和后端开发等多个平台。


Kotlin语法基础

Kotlin的语法设计非常现代化,简洁且易于理解。它可以轻松上手,并且不需要过多的模板代码。

**1.**变量的声明与使用

Kotlin 是一种强类型语言,所有变量都必须有确定的类型。Kotlin 的类型系统既安全又简洁,支持类型推断(无需显式声明类型),同时也提供完整的类型控制。

Kotlin 复制代码
fun main() {
    val name = "Kotlin"   // 不可变
    var age = 5            // 可变
    age += 1
    println("$name 语言已经 $age 岁了")
}

Kotlin 能自动推断变量类型。若希望明确类型,可写成下面的。

Kotlin 复制代码
val height: Double = 1.75
var count: Int = 10

**2.**数字类型介绍

Kotlin的类型系统十分丰富,支持基本数据类型、集合类型、字符串等,和Java一致。

Byte(8 位)取值范围:-128 到 127

Short(16 位)取值范围:-32768 到 32767

Int(32 位)取值范围:-2,147,483,648 到 2,147,483,647

Long(64 位)取值范围极大:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807,结尾必须加 L(大写字母)

Kotlin 复制代码
fun main() {
    var a = 10
    var b = 3

    println("加法: ${a + b}")
    println("减法: ${a - b}")
    println("乘法: ${a * b}")
    println("除法: ${a / b}")
    println("取余: ${a % b}")

    a += 5
    println("a 增加后为 $a")

    a++
    println("a 自增后为 $a")
}

引用需要用 $变量${表达式}。

3.布尔类型介绍

布尔类型只有两个值:truefalse

Kotlin 复制代码
fun main() {
    val isKotlinFun: Boolean = true
    val isJavaHard = false

    println("Kotlin 有趣吗?$isKotlinFun")
    println("Java 难吗?$isJavaHard")

    val result = isKotlinFun && !isJavaHard
    println("结论:Kotlin 是最棒的?$result")
}

4.字符类型介绍

Char 表示单个字符,用单引号包围。

Kotlin 复制代码
fun main() {
    val letter: Char = 'A'
    val digit = '5'
    val symbol = '#'

    println(letter)
    println(digit)
    println(symbol)

    // 判断字符类型
    println("是否为字母: ${letter.isLetter()}")
    println("是否为数字: ${digit.isDigit()}")
}

5.字符串类型介绍

Kotlin 的字符串是 String 类型,支持模板表达式与多行字符串。

Kotlin 复制代码
fun main() {
    val name = "Crogin"
    val age = 20
    println("我的名字是 $name,今年 $age 岁。")
}

多行字符串。

Kotlin 复制代码
fun main() {
    val text = """
        Kotlin 是一种现代编程语言,
        支持函数式和面向对象编程,
        并且完全兼容 Java。
    """

    println(text)
}

字符串有许多方法,一下是一些可以用到的。

Kotlin 复制代码
fun main() {
    val str = "Kotlin"
    println(str.length) //输出字符串长度 (6)
    println(str.uppercase())  //输出大写形式
    println(str.lowercase())  //输出小写形式
    println(str.contains("lin"))  //检查是否包含 "lin" 子串
    println(str.substring(0, 3))  //输出子串,从索引0到3
    println(str.reversed()) // 字符串反转
    println(str.first())    // 第一个字符
    println(str.last())     // 最后一个字符
    println(str.drop(2))    // 删除前两个字符
}

**3.**控制流

控制流语句用于控制程序的执行流程,Kotlin提供了丰富的控制流语句,如条件语句**ifelsewhen** ,以及循环语句**forwhile**等。

1.条件语句:if

与其他编程语言类似,if语句用于根据条件执行不同的代码块。

Kotlin 复制代码
val number = 10
if (number > 5) {
    println("数字比5大")
} else {
    println("比5小")
}

控制流语句在当每个分支代码只有一行的时候,可以直接省略{}

Kotlin 复制代码
fun main() {
    val score = 2
    if (score >= 90)
        println("优秀") 
    else if (score >= 70)
        println("良好") 
    else if (score >= 60) 
        println("及格") 
    else
        println("不及格")
}

除了直接执行语句之外,我们也可以将if和else用作结果判断,对于多行代码块的情况,默认最后一行作为返回的结果,比如:

Kotlin 复制代码
fun main() {
    val score = 70
    val res = if (score > 60) "Yes" else "No"
}

fun main() {
    val score = 80
    val res = if (score > 60) {
        println("居然捞你了")
        "Yes"   //代码块默认最后一行作为返回结果
    } else {
        println("挂科吧")
        "No"
    }
}

2.条件语句:when

when作为Kotlin的条件语句,类似于Java的switch语句,但更加灵活。when可以处理更复杂的条件,可以直接使用表达式而不是常量。

Kotlin 复制代码
fun main() {
    val grade = 'A'
    when (grade) {
        'A' -> println("很好")
        'B' -> println("合格")
        'C' -> println("不及格")
        else -> println("啥也不是") //如果以上条件都不满足,就进入else中
    }
}

when不仅支持值匹配,还支持范围匹配和类型检查,极大地提高了灵活性。

Kotlin 复制代码
fun main() {
    val score = 95
    when (score) {
        in 90..100 -> println("很好")   //使用in判断目标变量值是否在指定范围内
        in 70..89 -> println("不错")
        in 50..69 -> println("合格")
        else -> println("啥也不是")
    }
}

有时候我们可能希望某些值都属于同一个情况,可以使用逗号将其条件组合成一行。

Kotlin 复制代码
fun main() {
    val x : Int = 10
    when (x) {
        0, 1 -> print("x == 0 or x == 1")
        else -> print("其他。。。。")
    }
}

写when的流程代码时候,都会加上else防止意外,当然除了布尔类型可以不写else分支,因为只有0和1。

Kotlin 复制代码
fun main() {
    val a = true
    val result = when (a) {
        false -> 0
        true -> 1
    }
    println(result)
}

3.循环语句:for

Kotlin 的 for 循环可用于遍历区间、数组或集合,比 Java 更直观简洁。

Kotlin 复制代码
fun main() {
    for (i in 1..10)  //1..10表示1~10这个区间
        println("打印$i")

    for (i in 1..10 step 2) {  //step跳步,每次循环+2
        println(i)   // 1,3,5,7,9
    }

    for (i in 10 downTo 1) {
        println(i)   //10到1倒着来
    }

    for (i in 0..10)
       for (j in 0..2)
           println("外层$i,内层$j")

    for (i in 1 until 5) {   //左闭右开,输出1 2 3 4 
        println(i)
    }
}

遍历集合与索引

Kotlin 复制代码
fun main() {
    val fruits = listOf("苹果", "小米", "华为")
    for ((index, fruit) in fruits.withIndex()) {
        println("索引 $index 对应 $fruit")
    }
}

我们也可以在循环过程中提前终止或是加速循环的进行

Kotlin 复制代码
for (i in 0..10) {
    if (i == 1) continue  //比如i等于1时跳过这一轮,不执行打印
    println("i的值为 $i")
}

continue关键字来跳过本次循环。这里的跳过是指,在循环体中,无论后面有没有未执行的代码,一律不执行,比如上面的判断如果成功,那么将执行continue进行跳过,虽然后面还有打印语句,但是不会再去执行了,而是直接结束当前循环,开启下一轮。

但是在某些情况下,我们可能希望提前结束循环。

Kotlin 复制代码
fun main() {
    for (i in 0..2) {
        if (i == 1) break //当i等于1时提前结束
        println("i的值 $i")
    }
}

想要终止或者是加速外层循环,我们可以为循环语句打上标记。

Kotlin 复制代码
fun main() {
    outer@ for (i in 10..30) {   //outer@ 来进行标记
        inner@ for (j in 1..30) {
            if (i == j) break@outer  
            //break后紧跟要结束的循环标记,当i == j时终止外层循环
            println("$i, $j")
            
            //输出为 10,1   10,2  ......  10,9
        }
    }
}

4.循环结构:while

while 循环会在每次执行前先判断条件是否为真。和for循环一样,while也支持使用break和continue来进行循环的控制,以及嵌套使用。

Kotlin 复制代码
fun main() {
    var i = 50
    while (i > 0) { //只要大于0那么就可以继续执行
        if (i < 10) break //达到条件就结束
        println(i)
        i /= 2
    }
}

也可以先执行循环内容,然后再做循环条件判断,这里要用到do-while语句,其至少会执行一次循环体。

Kotlin 复制代码
fun main() {
    var x = 0
    do {
        println("x = $x")
        x++
    } while (x < 3)
}

4.总结

到这里,我们已经能看懂 Kotlin 的基础语法和逻辑结构了。接下来,就该让代码真正"动"起来了。

下一节,我们会讲解Kotlin的函数。

相关推荐
qq_336313931 小时前
java基础-set系列集合
java·开发语言·python
lzhdim1 小时前
C#开发的应用启动菜单应用(普通版) - 开源研究系列文章 - 个人小作品
开发语言·c#
Kyln.Wu1 小时前
【python实用小脚本-309】HR×Python改造面试路线规划|从手工排程到智能调度的化学反应,轻松实现路径优化
开发语言·python·面试
国服第二切图仔2 小时前
Electron for鸿蒙PC实战项目之简易绘图板应用
android·electron·开源鸿蒙·鸿蒙pc
烤麻辣烫2 小时前
黑马程序员苍穹外卖(新手)DAY12
java·开发语言·学习·spring·intellij-idea
BD_Marathon2 小时前
【IDEA】常用插件——3
android·java·intellij-idea
MM_MS2 小时前
C# 线程与并发编程完全指南:从基础到高级带详细注释版(一篇读懂)
开发语言·机器学习·计算机视觉·c#·简单工厂模式·visual studio
t***31652 小时前
QT开发:事件循环与处理机制的概念和流程概括性总结
开发语言·qt
北海道浪子2 小时前
Android 开发中的图片格式全指南
android·架构