一、注释
// 单行注释
// 单行注释
// 单行注释
// 单行注释
/*多
行
注
释*/
/*
* 多
* 行
* 注
* 释
*/
// Kotlin 的块注释可以嵌套,这与 Java 不同
/*****
/*
qwer
*/
***/
二、变量
定义变量,格式如下:
val 变量名: 类型 = 初始值
或
var 变量名: 类型 = 初始值
用 val 定义的变量,是不可变的,也就是只能赋值一次;用 var 定义的变量,可以重复赋值。
val a: Int = 10
a = 20 // error
val b: Int
b = 30 // ok
var c: Int = 43
c = 45 // ok
c = 999 // ok
如果通过初始值可以推断出变量的类型,那么类型也可以不写。
val n = 55 // Int
val s = "Kotlin, C++, Python" // String
val e // 错误!编译器不知道这是什么类型
三、基本类型
上面讲到类型,那么 Kotlin 的基本类型都哪些?
1. 数字类型
Byte,Short,Int,Long,Float,Double。
相当于 Java 的 byte,short,int,long,float,double。
2. Char
表示一个字符。
注意,Char 不是数字类型!
3. Boolean
与大多数语言的 bool 相同,支持 &&,||,! (且、或、非)操作。
4. Array
数组。这其实是个泛型(generic)类(class),后面会讲到。
5. String
字符串。
四、函数
定义函数的格式:
fun 函数名(参数列表): 返回值类型 {
函数体
}
例如,编写一个两个数的求和
fun sum(a: Int, b: Int): Int {
return a + b
}
像这样只有一个 return 的函数,也可以这样写:
fun sum(a: Int, b: Int): Int = a + b
如果没有返回值,就返回 Unit。来自官网的例子:
fun printSum(a: Int, b: Int): Unit {
println("sum of $a and $b is ${a + b}")
}
// 返回 Unit 则可以省略
fun printSum(a: Int, b: Int) {
println("sum of $a and $b is ${a + b}")
}
// 也可以这样写
fun printSum(a: Int, b: Int) = println("sum of $a and $b is ${a + b}")
上面的代码,用到了 Kotlin 的字符串模板这个特性。这个特性好理解,就是在字符串中写
${ 表达式 }
这样的表达式,表达式会被求值然后转换为字符串,放到对应的位置。
五、条件判断
与常见编程语言一样。
fun main(args: Array<String>) {
val age: Int = 20
val s: String
if (age >= 18) {
s = "成年人"
} else if (age > 12) {
s = "未成年人"
} else {
s = "小孩子"
}
println(s)
}
这里虽然出现了三次对 s 赋值的代码,但最多有一个会执行,所以用 val 没毛病。
六、循环
for 循环和 while 循环,一看就明白:
fun main(args: Array<String>) {
val ss: Array<String> = arrayOf("Go", "C++", "Kotlin", "Python")
for (s in ss) {
println(s)
}
val ks = listOf("物理", "化学", "生物")
var i = 0
while (i < ks.size) {
println(ks[i])
i++
}
}
七、when
when的用法比较杂,先给一个例子:
val ss = arrayOf("Go", "C++", "Kotlin", "Python")
val s: String = when {
"Kotlin" in ss -> "新一代程序设计语言"
"Dart" in ss -> "一声叹息"
"Python" in ss -> "人工智能领域第一编程语言"
else -> {
"没有匹配到"
}
}
println(s) // 新一代程序设计语言
可以看出,when 就是匹配上哪个就返回对应的结果,如果一个没有匹配到,就返回 else 分支里面的。
再看一个官网的例子:
fun describe(obj: Any): String =
when (obj) {
1 -> "One"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a string"
else -> "Unknown"
}