Kotlin 备忘清单是 Kotlin 编程语言的单页参考表
var late = true
var skipBreakfast = true
var underslept = false
var checkEmails = false
// true OR true
println(skipBreakfast || late) // true
// true OR false
println(late || checkEmails) // true
// false OR true
println(underslept || late) // true
// false OR false
println(checkEmails || underslept) // false
var oscarWinners = mutableMapOf("Parasite" to "Bong Joon-ho", "Green Book" to "Jim Burke", "The Shape Of Water" to "Guillermo del Toro")
println(oscarWinners.keys)
// Prints: [Parasite, Green Book, The Shape Of Water]
println(oscarWinners.values)
// Prints: [Bong Joon-ho, Jim Burke, Guillermo del Toro]
println(oscarWinners["Parasite"])
// Prints: Bong Joon-ho
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)
// Prints: {United States=Washington D.C., Germany=Berlin, Mexico=Mexico City, France=Paris, Brazil=Brasilia}
worldCapitals.remove("Germany")
println(worldCapitals)
// Prints: {United States=Washington D.C., Mexico=Mexico City, France=Paris, Brazil=Brasilia}
fun favoriteLanguage(name: String, language: String = "Kotlin") {
println("Hello, $name. Your favorite programming language is $language")
}
fun main() {
favoriteLanguage("Manon")
// Prints: Hello, Manon. Your favorite programming language is Kotlin
favoriteLanguage("Lee", "Java")
// Prints: Hello, Lee. Your favorite programming language is Java
}
// 注意啦,这里的 num1AndNum2 有个 operation,它是接收了一个函数作为形参
fun num1AndNum2(num1: Int, num2: Int, operation: (Int, Int) -> Int): Int {
// 让我们试着向 operation 传入参数
return operation(num1, num2)
}
fun plus(num1: Int, num2: Int): Int {
return num1 + num2
}
fun main(args: Array<String>) {
val total = num1AndNum2(100, 200, ::plus)
println(total)//300
// 怎么样?我们利用传入一个函数来充当另一个函数的参数
}
还记得我们怎么在 Java 中用接口吗?试着用函数参数简化它
//operation是一个函数类型的参数哦
fun num1AndNum2(num1: Int, num2: Int, operation: (Int, Int) -> Int): Int {
return operation(num1, num2)
}
fun main(args: Array<String>) {
//这里我们定义一个匿名函数
val operation: (Int, Int) -> Int = { i: Int, i2: Int ->
i + i2
}
val total = num1AndNum2(100, 200, operation)
println(total) //300
}
//我们还是不改变什么
fun num1AndNum2(num1: Int, num2: Int, operation: (Int, Int) -> Int): Int {
return operation(num1, num2)
}
fun main(args: Array<String>) {
//wow哦天哪,Lambda可以做到这样简洁
val total = num1AndNum2(100, 200) { n1, n2 ->
n1 + n2
}
println(total)
}
这里之所以可以把lambda写在外部,是因为operation是最后一个参数。
class Money(var amount: Double)
// 配合扩展函数,重载运算符 + 即 plus
operator fun Money.plus(money: Money): Money {
// 把金额相加返回一个新的 Money对象
return Money(this.amount + money.amount)
}
fun main() {
val appleMoney = Money(10.0)
val eggMoney = Money(6.0)
// 你没有看错,我们将两个类对象相加了
val allMoney = appleMoney + eggMoney
println(allMoney.amount)
// Print: 16.0
}
这里的 运算符重载 依赖于 扩展函数
// infix 定义一个中缀表达式,类似扩展函数那样
infix fun LocalDate.formatBy(pattern:String):String{
val formatter = DateTimeFormatter.ofPattern(pattern)
return this.format(formatter)
}
fun main() {
val currentDate = LocalDate.now()
println(currentDate formatBy "yyyy-MM-dd")
// Print: 2024-02-08
(1 until 100).forEach {
println(it)
// Print 1 至 99
}
}
class Student(
val name: String,
val gpa: Double,
val semester: String,
val estimatedGraduationYear: Int
)
fun main() {
val student = Student("Lucia", 3.95, "Fall", 2022)
println(student.name)
// Prints: Lucia
println(student.gpa)
// Prints: 3.95
println(student.semester)
// Prints: Fall
println(student.estimatedGraduationYear)
// Prints: 2022
}
class Student(
val name: String,
val gpa: Double,
val semester: String,
val estimatedGraduationYear: Int
) {
constructor(name: String, gpa: Double) : this(name, gpa, "Fall", 2024)
}
fun main() {
val student = Student("Lucia", 3.95)
println(student.name)
// Prints: Lucia
println(student.semester)
// Prints: Fall
println(student.estimatedGraduationYear)
// Prints: 2024
}
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)
// Prints: Lucia has 2 years left in college.
println("${student.name}'s letter grade is ${student.calculateLetterGrade()}.")
// Prints: Lucia's letter grade is A.
}
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)
// Prints: Lucia has 2 years left in college.
}