main() 函数
fun main() {
// Code goes here
}
main() 函数是每个 Kotlin 程序的起点,在执行之前必须包含在代码中
打印声明
println("Greetings, earthling!")
print("Take me to ")
print("your leader.")
/*
打印:
Greetings, earthling!
Take me to your leader.
*/
注释
// 这是单行注释
/*
这个
注释
用于
多
行
*/
执行顺序
fun main() {
println("I will be printed first.")
println("I will be printed second.")
println("I will be printed third.")
}
数据类型和变量
可变变量
var age =
age =
不可变变量
val goldenRatio =.618
类型推断
// 以下变量在 双引号 内分配了一个文本值
// 因此推断的类型是 String
var color = "Purple"
字符串 连接
var streetAddress = " Main St."
var cityState = "Brooklyn, NY"
println(streetAddress + " " + cityState)
// 打印: Main St. Brooklyn, NY
字符串模板
var address = " Main St."
println("The address is $address")
// 打印: The address is Main St.
内置属性和函数
var monument = "the Statue of Liberty"
println(monument.capitalize())
// 打印: The Statue of Liberty
println(monument.length)
// 打印:
字符转义序列
print("\"Excellent!\" I cried. \"Elementary,\" said he.")
// 打印: "Excellent!" I cried. "Elementary," said he.
- \n 插入新行
- \t 插入标签
- \r 插入回车
- \’ 插入 单引号
- \” 插入双引号
- \\ 插入反斜杠
- \$ 插入美元符号
算术运算符
+ 7 // 12
- 2 // 7
* 4 // 32
/ 5 // 5
% 2 // 1
+ 加法、- 减法、* 乘法、/ 除法和 % 模数
操作顺序
+ 8 * 2 / 4 - 3 // 6
+ (4 + 4) / 2 // 7
* 2 + 1 * 7 // 15
+ 18 / 2 * 1 // 12
- 3 % 2 + 2 // 7
增强赋值运算符
var batteryPercentage =
// 长语法
batteryPercentage = batteryPercantage +
// 带有增广赋值运算符的短句法
batteryPercentage +=
递增和递减运算符
var year =
year++ //
year-- //
数学库
Math.pow(.0, 3.0) // 8.0
Math.min(, 9) // 6
Math.max(, 12) // 12
Math.round(.7) // 14
条件表达式
if 表达式
var morning = true
if (morning) {
println("Rise and shine!")
}
// 打印: Rise and shine!
else 表达式
var rained = false
if (rained) {
println("今天不需要给植物浇水。")
} else {
println("植物需要浇水!")
}
// 打印: 植物需要浇水!
Else-If 表达式
var age =
if (age < ) {
println("您被视为未成年人")
} else if (age <) {
println("您被视为成年人")
} else {
println("你被认为是高级")
}
// 打印: 你被认为是高级
比较 运算符
var myAge =
var sisterAge =
var cousinAge =
myAge > sisterAge // true
myAge < cousinAge // false
myAge >= cousinAge // true
myAge <= sisterAge // false
逻辑运算符
var humid = true
var raining = true
var jacket = false
println(!humid)
// 打印: false
println(jacket && raining)
// 打印: true
println(humid || raining)
// 打印: true
AND 运算符: &&
var humid = true
var raining = true
var shorts = false
var sunny = false
// true AND true
println(humid && raining) // true
// true AND false
println(humid && shorts) // false
// false AND true
println(sunny && raining) // false
// false AND false
println(shorts && sunny) // false
或运算符:||
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
NOT 运算符
var hungry = true
var full = false
println(!hungry) // false
println(!full) // true
评估顺序
!true && (false || true) // false
/*
(false || true) 被评估首先返回 true。
然后,评估 !true && true 并返回最终结果 false
*/
!false && true || false // true
/*
!false 被评估首先返回 true。
然后评估 true && true,返回 true。
那么,真|| 评估 false 最终返回 true
*/
嵌套条件
var studied = true
var wellRested = true
if (wellRested) {
println("祝你今天好运!")
if (studied) {
println("你应该为考试做好准备!")
} else {
println("考试前花几个小时学习!")
}
}
// 打印: 祝你今天好运!
// 打印: 你应该为考试做好准备!
当表达式
var grade = "A"
when(grade) {
"A" -> println("很棒的工作!")
"B" -> println("做得太好了!")
"C" -> println("你通过了!")
else -> println("关!下次一定要多准备!")
}
// 打印: 很棒的工作!
范围运算符
var height = // inches
if (height in..53) {
println("抱歉,您必须至少 英寸才能乘坐过山车")
}
// Prints: 抱歉,您必须至少 英寸才能乘坐过山车
等式运算符
var myAge =
var sisterAge =
myAge == sisterAge // false
myAge !== sisterAge // true
Collections
不可变列表
var programmingLanguages = listOf("C#", " Java ", "Kotlin", " Ruby ")
可变列表
var fruits = mutableListOf("Orange", " Apple ", "Banana", "Mango")
访问列表元素
var cars = listOf(" BMW ", " Ferrari ", " Volvo ", " Tesla ")
println(cars[]) // Prints: Volvo
大小属性
var worldContinents = listOf("Asia", " Africa ", "North America", " South America ", "Antarctica", " Europe ", " Australia ")
println(worldContinents.size) // Prints:
列表操作
var seas = listOf("Black Sea", " Caribbean Sea ", "North Sea")
println(seas.contains("North Sea")) // Prints: true
// contains() 函数对任何列表执行读取操作并确定元素是否存在
seas.add("Baltic Sea") // 错误:无法对不可变列表执行写操作
// add() 函数只能在可变列表上调用,因此上面的代码会引发错误
不可变集
var primaryColors = setOf("Red", "Blue", "Yellow")
可变集
var womenInTech = mutableSetOf("Ada Lovelace", "Grace Hopper", "Radia Perlman", "Sister Mary Kenneth Keller")
访问集合元素
var companies = setOf(" Facebook ", "Apple", " Netflix ", " Google ")
println(companies.elementAt())
// Prints: Google
println(companies.elementAt())
// Returns and Error
println(companies.elementAtOrNull())
// Prints: null
不可变映射
var averageTemp = mapOf("winter" to, "spring" to 60, "summer" to 85, "fall" to 55)
可变映射
var europeanDomains = mutableMapOf("Germany" to "de", " Slovakia " to "sk", "Hungary" to "hu", "Norway" to "no")
检索映射键和值
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 greet() {
println("Hey there!")
}
fun main() {
// Function call
greet() // Prints: Hey there!
}
函数参数
fun birthday(name: String, age: Int) {
println("Happy birthday $name! You turn $age today!")
}
fun main() {
birthday("Oscar",)
// Prints: Happy birthday Oscar! You turn today!
birthday("Amarah",)
// Prints: Happy birthday Amarah! You turn today!
}
默认参数
fun favoriteLanguage(name, language = "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
}
命名参数
fun findMyAge(currentYear: Int, birthYear: Int) {
var myAge = currentYear - birthYear
println("I am $myAge years old.")
}
fun main() {
findMyAge(currentYear =, birthYear = 1995)
// Prints: I am years old.
findMyAge(birthYear =, currentYear = 2020)
// Prints: I am years old.
}
返回声明
// 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(, 8)
println("The area is $myArea.")
// Prints: The area is.
}
单表达式函数
fun fullName(firstName: String, lastName: String) = "$firstName $lastName"
fun main() {
println(fullName("Ariana", "Ortega"))
// Prints: Ariana Ortega
println(fullName("Kai", "Gittens"))
// Prints: Kai Gittens
}
函数字面量
fun main() {
// Anonymous Function:
var getProduct = fun(num: Int, num2: Int): Int {
return num * num2
}
println(getProduct(, 3))
// Prints:
// Lambda Expression
var getDifference = { num: Int, num2: Int -> num1 - num2 }
println(getDifference(, 3))
// Prints:
}
类
类示例
// 具有包含默认值的属性的类
class Student {
var name = "Lucia"
var semester = "Fall"
var gpa =.95
}
// 没有类体的简写语法
class Student
类实例
// Class
class Student {
var name = "Lucia"
var semester = "Fall"
var gpa =.95
}
fun main() {
var student = Student()
// Instance
println(student.name)
// Prints: Lucia
println(student.semester)
// Prints: Fall
println(student.gpa)
// Prints:.95
}
主构造函数
class Student(val name: String, val gpa: Double, val semester: String, val estimatedGraduationYear: Int)
fun main() {
var student = Student("Lucia",.95, "Fall", 2022)
println(student.name)
// Prints: Lucia
println(student.gpa)
// Prints:.95
println(student.semester)
// Prints: Fall
println(student.estimatedGraduationYear)
// Prints:
}
初始化块
class Student(val name: String, val gpa: Double, val semester: String, val estimatedGraduationYear: Int) {
init {
println("$name has ${estimatedGraduationYear -} years left in college.")
}
}
fun main() {
var student = Student("Lucia",.95, "Fall", 2022)
// Prints: Lucia has years left in college.
}
成员函数
class Student(val name: String, val gpa: Double, val semester: String, val estimatedGraduationYear: Int) {
init {
println("$name has ${estimatedGraduationYear -} years left in college.")
}
// 成员函数
fun calculateLetterGrade(): String {
return when {
gpa >=.0 -> "A"
gpa >=.7 -> "B"
gpa >=.7 -> "C"
gpa >=.0 -> "D"
else -> "E"
}
}
}
// 创建实例并调用函数时,将执行 when 表达式并返回字母等级
fun main() {
var student = Student("Lucia",.95, "Fall", 2022)
// Prints: Lucia has years left in college.
println("${student.name}'s letter grade is ${student.calculateLetterGrade()}.")
// Prints: Lucia's letter grade is A.
}