目录
2.1.1 Hello,World!
val name: String = "cyk"
val age: Int = 5
fun main(args: Array<String>) {
println("Hello,world")
}
1、用fun声明一个函数
2、参数类型写在变量名称后面
3、函数可以定义在文件的最外层,不需要放在类中
4、Kotlin没有声明数组类型的特殊语法
5、可以省略每行代码结尾的分号
2.1.2 函数
声明一个有返回值得函数,参数列表后面跟着返回类型,用一个冒号隔开
fun printAge(age: Int): String {
return "age = $age"
}
表达式函数体
可以让前面的函数变得更加简单。因为它的函数体是由单个表达式构成的,可以用这个表达式作为完整的函数体,并去掉花括号和return语句:
fun printAge(age: Int): String = "age = $age"
如果函数体写在花括号中,我们说这个函数有代码块体。如果它直接返回了一个表达式,它就有表达式体。
还可以对表达式函数体进一步简化,省掉返回类型:
fun printAge(age: Int) = "age = $age"
为什么可以不声明返回类型?事实上,每个变量和表达式都有类型,每个函数都有返回类型。但对表达式体函数来说,编译器会分析作为函数体的表达式,并把它的类型作为函数的返回类型,这种分析称为类型推导。只有表达式体函数的返回类型可以省略
2.1.3 变量
在java中声明变量的时候会以类型开始。再Kotlin中这样是行不通的,因为许多变量声明的类型都可以省略。所以在Kotlin中以关键字开始,然后是变量名称,最后可以加上类型(不加也行):
val age: Int = 5 -> val age = 5
和表达式体函数一样,如果不指定变量的类型,编译器会分析初始化器表达式的值,并把它的类型作为变量的类型。
可变变量和不可变量
声明变量的关键字有两个:
1、val (来自 value) ---不可变引用。使用val声明的变量不能在初始化后再次赋值。它对应java中的final变量
2、var (来自 variable) ---可变引用。这种变量可以被改变
尽管val引用自身是不可变的,但是它指向的对象可能是可变的
val language = arrayListOf<String>("java") //声明不可变引用
language.add("Kotlin") //改变引用指向的对象
2.1.4 更简单的字符串格式化: 字符串模板
fun main(args: Array<String>) {
val language = if (args.size > 0) args[0] else "Kotlin"
println("hello,$language!")
}
声明一个变量language,并在后面的字符串中使用了它,和许多脚本语言一样,Kotlin让你可以在字符串字面值中,引用局部变量,只需要在变量名称签名加上字符$。在java中这等价于("hello,“+language+"!")
如果要在字符串中使用$字符,你要对它进行转义:
println("hello,\$language")
会打印 hello,$language 并不会把language解释成变量的作用。
还可以引用更复杂的表达式,不仅局限简单的变量名称,还可以在双引号中直接嵌套双引号
println("hello,${if (args.size > 0) args[0] else "Kotlin"}!")
参考《Kotlin实战》