Bootstrap

Android开发实战班 - Android开发基础之 Kotlin语言基础与特性

Kotlin 是一种现代化的编程语言,由 JetBrains 开发,现已成为 Android 官方支持的开发语言。相比于 Java,Kotlin 提供了更简洁、安全和高效的语法特性,极大地提升了开发效率。本章节将深入讲解 Kotlin 的基础语法和核心特性,帮助学员掌握 Kotlin 在 Android 开发中的应用。

2.1 Kotlin 简介

  • Kotlin 的历史与发展

    • Kotlin 由 JetBrains 于 2011 年首次发布,2017 年被 Google 宣布为 Android 官方开发语言。
    • Kotlin 1.0 于 2016 年发布,目前最新版本为 Kotlin 1.8.x。
    • Kotlin 不仅可以用于 Android 开发,还支持服务器端开发、Web 开发等。
  • Kotlin 的优势

    • 简洁性: 相比 Java,Kotlin 代码更简洁,减少样板代码。
    • 安全性: 内置空安全机制,避免空指针异常。
    • 互操作性: Kotlin 与 Java 完全兼容,可以无缝调用 Java 代码。
    • 函数式编程支持: 支持高阶函数、Lambda 表达式等函数式编程特性。
    • 扩展函数: 可以为现有类添加新功能,而无需继承。

2.2 Kotlin 基本语法

2.2.1 数据类型与变量声明
  • 基本数据类型

    • Int: 32 位有符号整数,例如 val age: Int = 25
    • Double: 64 位浮点数,例如 val price: Double = 19.99
    • Boolean: 布尔类型,truefalse,例如 val isStudent: Boolean = false
    • Char: 单个字符,例如 val grade: Char = 'A'
    • String: 字符串,例如 val name: String = "Alice"
  • 变量声明

    • val(不可变变量):声明后不能重新赋值,类似于 Java 中的 final
      val pi: Double = 3.14159
      
    • var(可变变量):声明后可以重新赋值。
      var count: Int = 0
      count = 5
      
2.2.2 控制流
  • if 表达式

    • Kotlin 中的 if 是一个表达式,可以返回值。
      val max = if (a > b) a else b
      
  • when 表达式

    • when 类似于 Java 中的 switch,但功能更强大。
      when (x) {
          1 -> println("One")
          2 -> println("Two")
          else -> println("Other")
      }
      
  • for 循环

    • 使用 for 循环遍历集合或范围。
      for (i in 1..5) {
          println(i)
      }
      
  • whiledo-while 循环

    • 与 Java 中的用法类似。
      var i = 0
      while (i < 5) {
          println(i)
          i++
      }
      
      do {
          println(i)
          i++
      } while (i < 5)
      
2.2.3 函数
  • 函数声明

    • 使用 fun 关键字声明函数。
      fun greet(name: String): String {
          return "Hello, $name!"
      }
      
  • 单表达式函数

    • 当函数只有一个表达式时,可以省略大括号和 return 关键字。
      fun add(a: Int, b: Int) = a + b
      
  • 默认参数和命名参数

    • 函数参数可以有默认值,调用时可以省略参数。
      fun build(title: String, width: Int = 800, height: Int = 600) {
          // 函数体
      }
      
      build("My Window", 1024) // width=1024, height=600
      build(title = "My Window", height = 768) // width=800, height=768
      

2.3 Kotlin 面向对象编程

2.3.1 类与对象
  • 类声明

    • 使用 class 关键字声明类。
      class Person(val name: String, var age: Int)
      
  • 对象创建

    • 使用 valvar 声明对象。
      val person = Person("Alice", 25)
      
2.3.2 继承与多态
  • 继承

    • Kotlin 中的类默认是不可继承的,需要使用 open 关键字。
      open class Animal(val name: String)
      
      class Dog(name: String) : Animal(name)
      
  • 方法重写

    • 使用 override 关键字重写父类方法。
      open class Animal(val name: String) {
          open fun makeSound() {
              println("Some sound")
          }
      }
      
      class Dog(name: String) : Animal(name) {
          override fun makeSound() {
              println("Woof")
          }
      }
      
2.3.3 接口与抽象类
  • 接口

    • 使用 interface 关键字声明接口。
      interface Drivable {
          fun drive()
      }
      
      class Car : Drivable {
          override fun drive() {
              println("Driving a car")
          }
      }
      
  • 抽象类

    • 使用 abstract 关键字声明抽象类和方法。
      abstract class Shape {
          abstract fun area(): Double
      }
      
      class Circle(val radius: Double) : Shape() {
          override fun area() = Math.PI * radius * radius
      }
      

2.4 Kotlin 高级特性

2.4.1 Lambda 表达式与高阶函数
  • Lambda 表达式

    • 匿名函数,可以作为参数传递给高阶函数。
      val sum = { a: Int, b: Int -> a + b }
      println(sum(2, 3)) // 输出 5
      
  • 高阶函数

    • 接受函数作为参数或返回函数的函数。
      fun operate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
          return operation(a, b)
      }
      
      val result = operate(5, 3) { a, b -> a * b }
      println(result) // 输出 15
      
2.4.2 扩展函数
  • 扩展函数
    • 为现有类添加新功能,而无需继承。
      fun String.isPalindrome(): Boolean {
          return this.reversed() == this
      }
      
      println("madam".isPalindrome()) // 输出 true
      
2.4.3 数据类与解构声明
  • 数据类

    • 使用 data 关键字声明数据类,自动生成 equals(), hashCode(), toString() 等方法。
      data class User(val name: String, val age: Int)
      
      val user = User("Alice", 25)
      println(user) // 输出 User(name=Alice, age=25)
      
  • 解构声明

    • 可以将数据类对象解构为多个变量。
      val (name, age) = user
      println("$name is $age years old") // 输出 Alice is 25 years old
      
2.4.4 空安全机制
  • 可空类型

    • 使用 ? 标记可空类型。
      var name: String? = "Alice"
      name = null
      
  • 安全调用操作符

    • 使用 ?. 进行安全调用,避免空指针异常。
      println(name?.length) // 如果 name 不为 null,则输出 length,否则输出 null
      
  • Elvis 操作符

    • 使用 ?: 提供默认值。
      val length = name?.length ?: 0
      
  • 非空断言操作符

    • 使用 !! 强制解包可空类型,如果为 null 则抛出异常。
      println(name!!.length) // 如果 name 为 null,则抛出 NullPointerException
      

通过本章节的学习,学员将能够掌握 Kotlin 的基本语法和高级特性,理解 Kotlin 在 Android 开发中的应用,为后续的 Android 应用开发做好充分准备。

作者简介

前腾讯电子签的前端负责人,现 whentimes tech CTO,专注于前端技术的大咖一枚!一路走来,从小屏到大屏,从 Web 到移动,什么前端难题都见过。热衷于用技术打磨产品,带领团队把复杂的事情做到极简,体验做到极致。喜欢探索新技术,也爱分享一些实战经验,帮助大家少走弯路!

温馨提示:可搜老码小张公号联系导师

;