Kotlin语言简介
Kotlin是由JetBrains公司开发与设计的,早在2011年JetBrains就公布了Kotlin的第一个版本,并在2012年将其开源。
2016年,kotlin发布了1.0正式版。
Kotlin语言的优点
1.kotlin的语法更加简洁(对于同样的功能,使用kotlin开发的代码量可能会比使用Java开发的减少50%甚至更多)。
2.Kotlin的语法更加高级,使得开发效率大大提升。
3.几乎杜绝了空指针。
4.Kotlin和Java是100%兼容的。
变量val和var关键字
val(value的简写)用来声明一个不可变的变量。
var(variable的简写)用来声明一个可变的变量。
例如:
fun main() {
val a = 10
println("a = $a")
var b = 10
b *= 10
println("b = $b")//a等于a乘以10的积
}
运行结果:
注意:Kotlin每一行代码的结尾不用加分号。
Java和Kotlin数据类型对照表
Java基本数据类型 | Kotlin对象数据类型 | 数据类型说明 |
---|---|---|
int | Int |
整型 |
long | Long | 长整型 |
short |
Short | 短整型 |
float | Float | 单精度浮点型 |
double | Double | 双精度浮点型 |
boolean | Boolean | 布尔型 |
char | Char | 字符型 |
byte | Byte | 字节型 |
建议:优先使用val,当val没有办法满足你的需求时再使用var。
max()函数找出两个数中的最大值
/**
* max()函数:kotlin提供的一个内置函数
* 作用:返回两个参数中最大的数
*/
fun largerNumber(num1: Int, num2: Int): Int {
return max(num1, num2)
}
使用如:
println(largerNumber(num1 = 666, num2 = 999))//max()函数找出两个数中的最大值
打印:
min函数找出两个数中的最小值
//min()函数
fun minNumber(num1: Int, num2: Int): Int = min(num1, num2)
使用如:
println(minNumber(num1 = -10, num2 = -20))//min函数找出两个数中的最小值
打印:
if条件语句比大小效果相当于max()函数
/**
* if条件语句
*/
fun largerNumberIf(num1: Int, num2: Int): Int {
return if (num1 > num2) {
num1
} else {
num2
}
}
使用如:
println(largerNumberIf(num1 = 886, num2 = 688))//if条件语句比大小效果相当于max()函数
打印:
单if简化比大小效果相当于max()函数
/**
* if条件语句简化
*/
fun largerNumberIfSimplify(num1: Int, num2: Int) = if (num1 > num2) num1 else num2
使用如:
println(largerNumberIfSimplify(num1 = 123, num2 = 321))//单if简化比大小效果相当于max()函数
打印:
when条件语句
/**
* when条件语句
*/
fun getScore(name: String) = when {
name.startsWith("Tom") -> 86//以tom开头的都会打印86
name == "Jim" -> 77
name == "Jack" -> 95
name == "Lily" -> 100
else -> 0
}
使用如:
println(getScore("Tom a"))
打印:
kotlin中的for循环
for (i in 0..10){//kotlin中的for循环
println(i)
}
打印:
for循环中until关键字(左闭右开)和step关键字(步长)实现i=i+2效果
for (i in 0 until 10 step 2){//for循环中until关键字(左闭右开)和step关键字(步长)实现i=i+2效果
println(i)
}
打印:
for循环中downTo关键字(降序)和step关键字(步长)实现10到1的双数打印
for (i in 10 downTo 1 step 2) {//for循环中downTo关键字(降序)和step关键字(步长)实现10到1的双数打印
println(i)
}
打印:
继承与实现
/**
* Student类继承Person类实现Study接口
*/
class Student(sno: String, grade: Int, name: String, age: Int) : Person(name, age), Study {
init {//init结构体执行逻辑操作
println("My name is $name,I am $age years old.")
println("My sno is $sno,grade is $grade.")
}
override fun readBooks() {
println("$name is reading.")
}
override fun doHomework() {
println("$name is doing homework.")
}
}
/**
* Person类
*/
open class Person(val name: String, val age: Int) {//加上open关键字才可以被其他类继承
}
/**
* Study接口
*/
interface Study {
fun readBooks()
fun doHomework()
}
使用如:
val student = Student("202001", 1, "Jack", 18)
student.readBooks()
student.doHomework()
打印:
数据类中的data关键字
新建一个Cellphone为名的Kotlin类并加上data关键字如下:
package com.example.kt_demo
/**
* data关键字
*/
data class Cellphone(val brand: String, val price: Double)
使用如:
val cellphone1 = Cellphone("Samsung", 1299.99)
val cellphone2 = Cellphone("Samsung", 1299.99)
println(cellphone1)
println("cellphone1 equals cellphone2 " + (cellphone1 == cellphone2))
打印:
/**
* for-in 和 listof()函数结合使用
* 注意:listof()创建的是一个不可变的集合
*/
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
for (fruit in list) {
println(fruit)
}
打印:
/**
* 创建可变集合用mutableListOf()函数
*/
val list = mutableListOf("Apple", "Banana", "Orange", "Pear", "Grape")
list.add("Watermelon")
for (fruit in list) {
println(fruit)
}
打印:
/**
* mapOf()函数和for-in循环
*/
val map = mapOf("Apple" to 1, "Banana" to 2, "Orange" to 3, "Pear" to 4, "Grape" to 5)
for ((fruit, number) in map) {
println("fruit is $fruit,number is $number")
}
打印:
/**
* 利用Lambda表达式遍历找出最长的水果名
*/
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val maxLengthFruit = list.maxBy { it.length }
println(maxLengthFruit)
打印:
/**
* 通过Lambda表达式映射把集合中的字母变大写
*/
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val newList = list.map { it.toUpperCase() }
for (fruit in newList) {
println(fruit)
}
打印:
/**
* filter()函数获取5个字母以内的水果名
*/
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val newList = list.filter { it.length<=5 }.map { it.toUpperCase() }
for (fruit in newList){
println(fruit)
}
打印:
any()函数和all()函数
/**
* any()函数和all()函数
*/
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val anyResult = list.any { it.length <= 5 }
val allResult = list.all { it.length <= 5 }
println("anyResult is $anyResult, allResult is $allResult")
any()表示集合中是否存在5个字母以内的单词,all()函数表示集合中是否所有单词都在5个字母以内。
函数参数默认值
fun printParams(num: Int, str: String = "hello") {
println("num is $num , str is $str")
}
fun printParams2(num: Int = 100, str: String) {
println("num is $num , str is $str")
}
使用如:
/**
* 函数参数默认值
*/
printParams(123)
printParams2(str = "world")
打印:
详情请参考《第一行代码 第3版》