学习官方教程并做个笔记
条件表达式
可以直接用条件表达式来写函数
fun main(args: Array<String>) {
println(max(args[0].toInt(), args[1].toInt()))
}
//kotlin不支持三目运算符。。。
fun max(a: Int, b: Int) = if (a > b) a else b
空指针检查
// Return null if str does not hold a number
fun parseInt(str: String): Int? {
try {
return str.toInt()
} catch (e: NumberFormatException) {
println("One of the arguments isn't Int")
}
return null
}
fun main(args: Array<String>) {
if (args.size < 2) {
println("No number supplied");
} else {
val x = parseInt(args[0])
val y = parseInt(args[1])
// We cannot say 'x * y' now because they may hold nulls
if (x != null && y != null) {
print(x * y) // Now we can
} else {
println("One of the arguments is null")
}
}
}
用is关键字来判断类型
跟java中的instance有什么区别?
fun main(args: Array<String>) {
println(getStringLength("aaa"))
println(getStringLength(1))
}
fun getStringLength(obj: Any): Int? {
if (obj is String)
return obj.length // no cast to String is needed
return null
}
while循环
fun main(args:array<String>){
var i = 0
while(i<args.size)
println(args[i++])
}
fun testDoWhile(y:Int){
do{
y--
}while(y > 0)
}
for循环
for循环要用in关键字,是一种foreach
写法
for (item in collection) print(item)
for (item: Int in ints) {
// ...
}
java中的for(int i=0;i<10;i++)
没法玩了
可以用withIndex
来获取索引
for((index,value) in array.withIndex()){
println("the element at $index is $value")
}
in关键字
- 判断一个数字是否在一个范围内
val y=10
if (x in 1..y-1)//这个..有点意思
println("ok")
- 范围迭代
for(a in 1..5)
print("${a} ")
- 检查数字是否超出数组范围
if (x !in 0..array.size - 1)
println("Out: array has only ${array.size} elements. x = ${x}")
- 检查容器中是否包含此对象
if ("aaa" in array)
println("Yes: array contains aaa")
when表达式
嗯。。其实就是java里的switch case
fun main(args: Array<String>) {
cases("Hello")
cases(1)
cases(0L)
cases(MyClass())
cases("hello")
}
fun cases(obj: Any) {
when (obj) {
1 -> println("One")
"Hello" -> println("Greeting")
is Long -> println("Long")
!is String -> println("Not a string")
else -> println("Unknown")
}
}
class MyClass() {
}