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
京公网安备 11010502036488号