Kotlin基础
Kotlin基础<一>
[TOC]
还记得当初在大学学习编程语言的第一次编程体验吗?你第一行写的代码是什么呢?对于C程序员来说,恐怕印象最深刻的就是printf("Hello world")
了吧?学习Kotlin,我们也从这个经典的例子开始。
fun main(args: Array<String>) {
println("Hello world")
}
你发现了kotlin的语法特性了吗?
- 关键字
fun
用来定义一个函数。 - 参数的类型写在参数的后面,如这里的
args: Array<String>
表示args是一个String的数组。 - 可以像c++那样在类外面定义函数,而不必像java那样全都写在类里面。
- 同样是基于JVM的语言,Kotlin使用
println("Hello world")
而不是更长代码的System.out.println("Hello world")
。Kotlin的标准库包装了非常多的Java标准库API。 - 代码的结尾可以不写分号,就像Python语言那样
函数
现在就来看看一个函数的定义方式:
fun main(args: Array<String>) {
//println("Hello world")
val x = 10
val y = 20
println("The max number of $x and $y is ${max(x, y)}")
}
fun max(x: Int, y: Int) : Int {
return if (x > y) x else y
}
//result:
//The max number of 10 and 20 is 20
函数用fun
声明,fun
后面是函数名字,这里是max
然后是参数列表,再接着是返回值,这里是Int
,注意,Int
前的:
不能省略。这样就组成了一个函数声明。
函数体只有一行语句:return if (x > y) x else y
,对于这行代码,你能发现什么?没错,在kotlin中,if
是一个有值的表达式(expressions)而不是一个statements。这行代码的意思和Java的三目运算一样:(x > y) ? x : y
理解了这个,你的函数还可以进一步简化为fun max(x: Int, y: Int): Int = if (x > y) x else y
对于简单的函数,你可以直接在返回值后面加一个等号,紧接着是执行的语句。采用这种写法,你甚至可以省略返回值:fun max(x: Int, y: Int) = if (x > y) x else y
在kotlin中,这也是可以的。
变量
在Java中,变量声明一般是int a
这种形式,但在kotlin中,这是不行的。在Kotlin中,声明一个变量的形式如下:
val string = "hello world"
val age = 20
对于赋初值的变量,你可以省略变量的类型,编译器会自动帮你推导出来,你也可以指定其类型:
val age: Int = 20
可修改变量和不可修改变量
对于变量的声明,有两个关键字:
- val-不可修改的。用val声明的变量不能被修改
- var-可修改的。用var声明的变量可以再次被重新赋值。
在kotlin中的建议是,如果一个变量除非是有必要被修改时,才声明其为var
,否则一律声明为val
。
声明为val
的变量的引用,准确的说应该是它的reference是不能被修改的,但是它所指向的对象是可以被修改的。举个例子:
fun main(args: Array<String>) {
val languages = arrayListOf("Java")
languages.add("kotlin")
languages.map(::println)
}
//result:
//Java
//kotlin
这样做是可以的,但如果:
fun main(args: Array<String>) {
val languages = arrayListOf("Java")
languages.add("kotlin")
languages.map(::println)
languages = arrayListOf("c++")//error
}
或者
val age = 20
age = 50 //error
都是错误的。
字符串模版
在介绍函数的定义的时候,有这么一句:
println("The max number of $x and $y is ${max(x, y)}")
。
乍一看大家可能觉得有点奇怪,这就是我接下来要介绍的字符串模版了。
在Java中,你得这样干System.out.println("The max number of " + x + " and " + y + " is " + someClassInstance.max(x, y))
,在kotlin中就简单多了,如果是一个变量,那么直接在字符串中相应的位置使用$value
就可以了,如果是一个表达式或者函数,则需要用花括号括起来:${expressions}
还是用例子来说明:
fun main(vararg args: String) {
val x = 10
val y = 20
println("the max is ${if (x > y) x else y}")
}
//result:
//the max is 20
你还可以在花括号中将用两个双引号的内容还原成字符串:
fun main(vararg args: String) {
val x = 10
val y = 20
println("the max is ${if (x > y) "x" else "y"}")
}
//result:
//the max is y