Kotlin 语言

精选 Kotlin 语言 常用指令与核心速查备忘单,涵盖高频用法、配置参数与实用技巧。 精选 Kotlin 常用指令与核心速查备忘单,涵盖高频用法、配置参数与实用技巧。

#Kotlin 入门 (Introduction to Kotlin)

#main() 入口

fun main() {
  println("Greetings, qr.warpnav.com!")
  // 在此编写代码
}

main() 函数是每个 Kotlin 程序的起点,执行前必须包含在代码中

#打印语句 (Print statement)

println("Greetings, earthling!")
print("Take me to ")
print("your leader.")

/*
输出:
Greetings, earthling!
Take me to your leader.
*/

#注释 (Notes)

// 这是单行注释

/*
这是
一条
多行
注释
*/

#执行顺序 (Execution order)

fun main() {
  println("I will be printed first.")
  println("I will be printed second.")
  println("I will be printed third.")
}

#数据类型与变量

#可变变量 (Mutable variables)

var age = 25
age = 26

#不可变变量 (Immutable variables)

val goldenRatio = 1.618

#类型推断 (Type inference)

// 以下变量在双引号内赋了字面量
// 因此推断类型为 String

var color = "Purple"

#字符串拼接 (String concatenation)

var streetAddress = "123 Main St."
var cityState = "Brooklyn, NY"

println(streetAddress + " " + cityState)
// 输出: 123 Main St. Brooklyn, NY

#字符串模板 (String Templates)

var address = "123 Main St."
println("The address is $address")
// 输出: The address is 123 Main St.

#内置属性与函数 (Built-in Properties and Functions)

var monument = "the Statue of Liberty"

println(monument. capitalize())
// 输出: The Statue of Liberty
println(monument. length)
// 输出: 21

#字符转义 (Character escape)

print("\"Excellent!\" I cried. \"Elementary,\" said he.")

// 输出: "Excellent!" I cried. "Elementary," said he.
  • \n 插入换行
  • \t 插入制表符
  • \r 插入回车
  • \' 插入单引号
  • \" 插入双引号
  • \\ 插入反斜杠
  • \$ 插入美元符号

#算术运算符 (Arithmetic Operators)

5 + 7  // 12
9 -2   // 7
8 *4   // 32
25 /5  // 5
31 % 2 // 1

+ 加法,- 减法,* 乘法,/ 除法,% 取模

#运算优先级 (Order of operations)

5 + 8 *2 /4 -3 // 6
3 + (4 + 4) /2 // 7
4 *2 + 1 *7    // 15
3 + 18 /2 *1   // 12
6 -3 % 2 + 2   // 7

#增强赋值运算符 (Enhanced assignment operator)

var batteryPercentage = 80

// 完整写法
batteryPercentage = batteryPercentage + 10

// 使用增强赋值运算符的简写
batteryPercentage += 10

#自增与自减运算符 (Increment and decrement operators)

var year = 2019
year++   // 2020
year--   // 2019

#数学库 (Math library)

Math.pow(2.0, 3.0) // 8.0
Math.min(6, 9)     // 6
Math.max(10, 12)   // 12
Math. round(13.7)  // 14

#条件表达式

#If 表达式 (If expression)

var morning = true

if (morning) {
  println("Rise and shine!")
}
// 输出: Rise and shine!

#Else 表达式 (Else-expression)

var rained = false

if (rained) {
  println("No need to water the plants today.")
} else {
  println("The plant needs to be watered!")
}
// 输出: The plant needs watering!

#Else-If 表达式 (Else-If expressions)

var age = 65

if (age < 18 ) {
  println("You are considered a minor")
} else if (age < 60) {
  println("You are considered an adult")
} else {
  println("You are considered senior")
}

// 输出: you are considered senior

#比较运算符 (Comparison Operators)

var myAge = 19
var sisterAge = 11
var cousinAge = 11

myAge > sisterAge  // true
myAge < cousinAge  // false
myAge >= cousinAge // true
myAge <= sisterAge // false

#逻辑运算符 (Logical Operators)

var humid = true
var raining = true
var jacket = false

println(!humid)
// 输出: false
println(jacket && raining)
// 输出: true
println(humid || raining)
// 输出: true

#AND 运算符 (AND operator: &&)

var humid = true
var raining = true
var shorts = false
var sunny = false

// true 并且 true
println(humid && raining) // true
// true 并且 false
println(humid && shorts)  // false
// false 并且 true
println(sunny && raining) // false
// false 并且 false
println(shorts && sunny)  // false

#OR 运算符 (Or operator:||)

var late = true
var skipBreakfast = true
var underslept = false
var checkEmails = false

// true 或者 true
println(skipBreakfast || late) // true
// true 或者 false
println(late || checkEmails)   // true
// false 或者 true
println(underslept || late)    // true
// false 或者 false
println(checkEmails || underslept) // false

#NOT 运算符 (NOT operator)

var hungry = true
var full = false

println(!hungry) // false
println(!full)   // true

#求值顺序 (Evaluation order)

!true && (false || true) // false
/*
先求值 (false || true) 得到 true。
再求值 !true && true,最终结果为 false
*/

!false && true || false // true
/*
先求值 !false 得到 true。
再求值 true && true 得到 true。
然后 true || false,最终返回 true
*/

#嵌套条件 (Nested conditions)

var studied = true
var wellRested = true

if (wellRested) {
  println("Good luck today!")
  if (studied) {
    println("You should prepare for the exam!")
  } else {
    println("Spend a few hours studying before the exam!")
  }
}

// 输出: Good luck today!
// 输出: You should be ready for the exam!

#When 表达式 (When expression)

var grade = "A"

when (grade) {
  "A" -> println("Great job!")
  "B" -> println("Great job!")
  "C" -> println("You passed!")
  else -> println("Close! Be sure to prepare more next time!")
}
// 输出: Great job!

#范围运算符 (Range operator)

var height = 46 // 英寸

if (height in 1..53) {
  println("Sorry, you must be at least 54 inches to ride the coaster")
}
// 输出: Sorry, you must be at least 54 inches to ride the roller coaster

#相等运算符 (Equality Operators)

var myAge = 22
var sisterAge = 21

myAge == sisterAge // false
myAge != sisterAge // true

#空值安全

#可空与不可空 (Nullable vs Not-Nullable)

var a: String = "Kotlin" // a 永不可为 null
a = null // 编译错误
var b: String? = "Kotlin" // b 可为 null
b = null // 合法

#安全调用 (Safe-Calls)

val a = "Kotlin"
val b: String? = null
println(a.length) // 可安全调用,因为 a 永不为 null
println(b?.length) // b?.length 返回 b 的长度;若 b 为 null 则返回 null
println(a?.length) // 不必要的安全调用

#链式安全调用 (Chaining Safe-Calls)

bob?.department?.head?.name // 链式调用:任一属性为 null 则整链返回 null

#Elvis 运算符 (Elvis Operator)

val l = b?.length ?: -1 // 如果 b 为 null,返回默认值 -1
// 等价于:
val l: Int = if (b != null) b.length else -1

#非空断言运算符 (Not Null Assertion Operator)

val l = b!!.length // 若 b 为 null,则抛出 NullPointerException

#集合

#不可变列表 (Immutable list)

var programmingLanguages = listOf("C#", "Java", "Kotlin", "Ruby")

#可变列表 (Mutable List)

var fruits = mutableListOf("Orange", "Apple", "Banana", "Mango")

#访问列表 (Access List)

var cars = listOf("BMW", "Ferrari", "Volvo", "Tesla")

println(cars[2]) // 输出: Volvo

#大小属性 (Size Attribute)

var worldContinents = listOf("Asia", "Africa", "North America", "South America", "Antarctica", "Europe", "Australia")

println(worldContinents.size) // 输出: 7

#列表操作 (List Manipulation)

var seas = listOf("Black Sea", "Caribbean Sea", "North Sea")
println(seas. contains("North Sea")) // 输出: true

// contains() 对任意列表执行只读操作,判断元素是否存在
seas.add("Baltic Sea") // 错误:不可写入不可变列表
// add() 只能用于可变列表,所以上面的代码会报错

#不可变集合 (Immutable Sets)

var primaryColors = setOf("Red", "Blue", "Yellow")

#可变集合 (Mutable Sets)

var womenInTech = mutableSetOf("Ada Lovelace", "Grace Hopper", "Radia Perlman", "Sister Mary Kenneth Keller")

#访问集合元素 (Access Collection Elements)

var companies = setOf("Facebook", "Apple", "Netflix", "Google")

println(companies.elementAt(3))
// 输出: Google
println(companies.elementAt(4))
// 返回并报错
println(companies.elementAtOrNull(4))
// 输出: null

#不可变映射 (Immutable Map)

var averageTemp = mapOf("winter" to 35,  "spring" to 60,  "summer" to 85, "fall" to 55)

#可变映射 (Mutable Mapping)

var europeanDomains = mutableMapOf("Germany" to "de", "Slovakia" to "sk", "Hungary" to "hu", "Norway" to "no")

#获取映射的键和值 (Retrieve map keys and values)

var oscarWinners = mutableMapOf("Parasite" to "Bong Joon-ho", "Green Book" to "Jim Burke", "The Shape Of Water" to "Guillermo del Toro")

println(oscarWinners.keys)
// 输出: [Parasite, Green Book, The Shape Of Water]

println(oscarWinners.values)
// 输出: [Bong Joon-ho, Jim Burke, Guillermo del Toro]
println(oscarWinners["Parasite"])
// 输出: Bong Joon-ho

#添加和删除映射条目 (Add and remove map entries)

var worldCapitals = mutableMapOf("United States" to "Washington D.C.", "Germany" to "Berlin", "Mexico" to "Mexico City", "France" to "Paris")

worldCapitals.put("Brazil", "Brasilia")
println(worldCapitals)
// 输出: {United States=Washington D.C., Germany=Berlin, Mexico=Mexico City, France=Paris, Brazil=Brasilia}

worldCapitals.remove("Germany")
println(worldCapitals)
// 输出: {United States=Washington D.C., Mexico=Mexico City, France=Paris, Brazil=Brasilia}

#函数

#函数 (Function)

fun greet() {
  println("Hey there!")
}

fun main() {
  //Function call
  greet() // 输出: Hey there!
}

#函数参数 (Function Parameters)

fun birthday(name: String, age: Int) {
   println("Happy birthday $name! You turn $age today!")
}

fun main() {
  birthday("Oscar", 26)
  // 输出: Happy birthday Oscar! You turn 25 today!
  birthday("Amarah", 30)
  // 输出: Happy birthday Amarah! You turn 30 today!
}

#默认参数 (Default Parameters)

fun favoriteLanguage(name: String, language: String = "Kotlin") {
  println("Hello, $name. Your favorite programming language is $language")
}

fun main() {
  favoriteLanguage("Manon")
  // 输出: Hello, Manon. Your favorite programming language is Kotlin

  favoriteLanguage("Lee", "Java")
  // 输出: Hello, Lee. Your favorite programming language is Java
}

#命名参数 (Named Parameters)

fun findMyAge(currentYear: Int, birthYear: Int) {
   var myAge = currentYear -birthYear
println("I am $myAge years old.")
}

fun main() {
  findMyAge(currentYear = 2020, birthYear = 1995)
  // 输出: I am 25 years old.
  findMyAge(birthYear = 1920, currentYear = 2020)
  // 输出: I am 100 years old.
}

#返回语句 (Return Statement)

//Return type is declared outside the parentheses
fun getArea(length: Int, width: Int): Int {
  var area = length *width

  //return statement
  return area
}

fun main() {
  var myArea = getArea(10, 8)
println("The area is $myArea.")
// 输出: The area is 80.
}

#单表达式函数 (Single expression function)

fun fullName(firstName: String, lastName: String) = "$firstName $lastName"

fun main() {
  println(fullName("Ariana", "Ortega"))
  // 输出: Ariana Ortega
  println(fullName("Kai", "Gittens"))
  // 输出: Kai Gittens
}

#函数字面量 (Function Literals)

fun main() {
  //Anonymous Function:
  var getProduct = fun(num1: Int, num2: Int): Int {
return num1 *num2
  }
  println(getProduct(8, 3))
  // 输出: 24
//Lambda Expression
  var getDifference = { num1: Int, num2: Int -> num1 -num2 }
  println(getDifference(10, 3))
  // 输出: 7
}

#

#类示例 (Class Example)

// 包含默认值属性的类
class Student {
  var name = "Lucia"
  var semester = "Fall"
  var gpa = 3.95
}

// 无类体的简写语法
class Student

#类实例 (Class Instance)

// 类
class Student {
  var name = "Lucia"
  var semester = "Fall"
var gpa = 3.95
}

fun main() {
  var student = Student()
  // 实例
  println(student.name)
  // 输出: Lucia
  println(student.semester)
  // 输出: Fall
  println(student.gpa)
  // 输出: 3.95
}

#主构造函数 (Primary Constructor)

class Student(val name: String, val gpa: Double, val semester: String, val estimatedGraduationYear: Int)

fun main() {
  var student = Student("Lucia", 3.95, "Fall", 2022)
  println(student.name)
  // 输出: Lucia
  println(student.gpa)
  // 输出: 3.95
  println(student.semester)
  // 输出: Fall
  println(student.estimatedGraduationYear)
  // 输出: 2022
}

#初始化块 (Initialization Block)

class Student(val name: String, val gpa: Double, val semester: String, val estimatedGraduationYear: Int) {
  init {
    println("$name has ${estimatedGraduationYear -2020} years left in college.")
  }
}

fun main() {
  var student = Student("Lucia", 3.95, "Fall", 2022)
// 输出: Lucia has 2 years left in college.
}

#成员函数 (Member Function)

class Student(val name: String, val gpa: Double, val semester: String, val estimatedGraduationYear: Int) {

  init {
println("$name has ${estimatedGraduationYear -2020} years left in college.")
  }

  // 成员函数
  fun calculateLetterGrade(): String {
    return when {
      gpa >= 3.0 -> "A"
      gpa >= 2.7 -> "B"
      gpa >= 1.7 -> "C"
gpa >= 1.0 -> "D"
      else -> "E"
    }
  }
}

// 创建实例并调用函数时,when 表达式将被执行并返回字母等级
fun main() {
  var student = Student("Lucia", 3.95, "Fall", 2022)
// 输出: Lucia has 2 years left in college.
  println("${student.name}'s letter grade is ${student.calculateLetterGrade()}.")
  // 输出: Lucia's letter grade is A.
}

#🔗 参考资源