文章目录
1 函数和变量
1.1 基本程序
fun main(args: Array<String>) {
println("Hello World!")
}
程序从“Hello World”打印开始,从这个简单的程序中,包含Kotlin语言的以下特性:
- 函数使用关键字fun声明
- 主函数依然为main函数
- Kotlin中没有Java中数组类型,数组就是Array类
- 函数可以定义在文件的最外层,可以不用放到类中
- 参数类型在参数的后面
- Java中的很多语句Kotlin做了更简易的封装,比如println
- 语句结尾不需要分号
1.2 函数
fun max(a: Int, b: Int): Int {
return if (a > b) a else b
}
函数仍然由函数名,参数列表和返回值类型组成。不同的是函数使用fun
定义,参数类型和返回值类型在后面
- Kotlin不支持三元运算符(?😃
- Kotlin中很多逻辑运算是表达式,可以直接返回值
上面的可以简化为:
fun max(a: Int, b: Int): Int = if (a > b) a else b
这样的函数拥有表达式体,上面有大括号的函数拥有代码块体。
还可以进一步简化为:
fun max(a: Int, b: Int) = if (a > b) a else b
对于拥有表达式体的函数,可以省略其返回值类型,因为Kotlin具有类型推导能力。
1.3 变量
Java中声明变量从类型开始,而Kotlin中很多时候不需要声明变量的类型,因为Kotlin有强大的类型推导功能,能够根据上下文推导出具体的类型。
1.3.1 变量的类型推导
val a = 10
val b = 12.3
val c = "test"
a被推导为Int类型
b被推导为Double类型
c被推导为String类型
Kotlin中没有Java中的基本数据类型,所有类型都是类对象
如果要显示指定数据的类型,可以在变量后面加变量的类型
val d: Byte = 10
1.3.2 可变变量和不可变量
Kotlin中通常有两个变量修饰符
val(value)
:不能在初始化后再次赋值,对应于Java中使用final修饰的变量var(variable)
:可变变量,对应于Java中的非final修饰符
默认情况下,应该首先使用val
修饰符,当变量确实需要改变时,才替换成var
修饰符
1.3.3 变量使用规则
val类型赋值之后不可改变,否则编译不过
如果变量不在定义的时候初始化,则需要确定其类型,因为Kotlin虽然可以类型推导,但还是静态类型的语言,每个变量都有确定的类型。不在定义的时候确定其类型,编译器无法推导,无法编译通过
val b: Int
if (a > 5) {
b = 1
} else {
b = 0
}
val变量只能赋值一次,如果编译器能够保证只执行一条初始化语句,则可以编译通过
val list = listOf(1, 3, 4)
list.addLast(5)
val变量定义的引用不可变,但是其引用对象的内容可变。list指向一个List对象,不能改变其引用直系指向,但是该List对象可以改变其中存储的元素
对于var可变类型变量,不能改变其数据类型,当a定义的时候,类型推导为Int类型,此时该变量的类型就已经被确定,不能改变其类型,否则编译失败
1.4 字符串模板
开发中很多时候涉及到字符串拼接,Java中拼接如下
"Hello, " + name + "!"
在Kotlin中可以使用更简便的写法,就是字符串模板
"Hello, $name!"
字符串模板不止可以引用简单变量,还可以引用复杂的变量
val names = listOf("World", "Kotlin")
println("Hello, ${
names[0]}!")
这里可以使用大括号引用字符串数组的第一个元素
println("Hello, ${
if (args.size > 0) args[0] else "World"}!")
大括号中还可以嵌套表达式
2 类和属性
Kotlin也是面向对象的语言,是JVM语言,在Java虚拟机上运行,所以也是有类和属性一说
Java中有一个JavaBean
的概念,表达的是一种Java中规范类的写法
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
通常这些构造函数和get
方法都是比较重复的代码,与具体的业务逻辑无关
可以将上面的代码拷贝到kotlin文件中,能够自动将Java代码转换成kotlin代码
class Person