Kotlin 学习总结
2019-08-05 本文已影响0人
SoaringHeart
Kotlin 学习笔记
Kotlin 是一门完全面向对象(Object Oriented)的语言。在Kotlin中一切皆是对象。所有对象皆继承自Any(类似其他语言中的所有对象的祖先类Object)。
###注释
// 行注释
/* 多行的
块注释。 */
基本数值类型
Kotlin的基本数值类型包括Byte、Short、Int、Long、Float、Double等,这些类型都是内置类型。
在 Kotlin 中,函数是对象,基本类型也是对象,所有东西都是对象:数字、字符、布尔和数组。同时,Kotlin提供多个内建对象(buildin object):Number,Char,Boolean,String,Array等。(JavaScript 中的所有事物都是对象:字符串、数值、数组、函数等等。此外,JavaScript 提供多个内建对象,比如 String、Date、Array 等等。)
### 常量、变量
使用val 定义一次赋值(只读)的局部变量;使用var定义可变变量
val a: Int = 1 // 立即赋值
val b = 2 // 自动推断出 `Int` 类型
val c: Int // 如果没有初始值类型不能省略
### 使用is 运算符进行类型检测
is 运算符检测一个表达式是否某类型的一个实例。
### 字符串
字符串可以包含模板表达式。模板表达式以美元符号($)开始或者是 ${任意表达式}。
val fooTemplateString = "$fooString has ${fooString.length} characters"
val str = "kotlin very good"
str.first() <=> str[0] <=> str.get(0)
val a = "Hello"
val b = "World"
val c = "$a $b" 或者 val c = a + b (function a.plus(b))
输出将是: Hello World
val sb = StringBuilder()
sb.append(a).append(b)
val c = sb.toString()
集合
不可变集合:List<E>、Set<E>、Map<K,V>
可变类型集合: MutableList<E>、MutableSet<E>、MutableMap<K,V>
Set 类型集合的使用和List类型集合大致相同,Set集合会把重复的元素去除掉。
List类型
声明并初始化List的集合:使用listOf(..)函数
声明并初始化MutableList的集合:使用mutableListOf(..)函数
val mutableList = mutableListOf<String>("1","2","3","4","5") // 确定元素的值类型
mutableList.add("6") // 添加元素
mutableList.remove(1) // 删除某一元素
mutableList.clear() // 清空集合
其他方法 first, last, contains, indexOf, elementAt,reversed, sortedBy(),
Map<K,V>类型
不可变的Map类型集合的初始化使用:mapOf()函数
可变的Map类型集合的初始化使用:mutableMapOf()函数
val map2 = mapOf<Int,String>(1 to "value1" , 2 to "value2")
控制流
1. 常规if(无三元运算符)
2. for 循环可以对任何提供迭代器(iterator)的对象进行遍历
for (item in collection) print(item)
带索引 withIndex
for ((index, value) in array.withIndex()) {
println("the element at $index is $value")
}
// it并不是Kotlin中的一个关键字(保留字)。it是在当一个高阶函数中Lambda表达式的参数只有一个的时候可以使用it来使用此参数。it可表示为单个参数的隐式名称,是Kotlin语言约定的。)
iterator.forEach {
println("The element is $it")
}
map2.forEach{ key,value ->
println("$key \t $value")
}
//forEachIndexed遍历集合并且可以拿到下标index
stringList.forEachIndexed { index, string ->
println("forEachIndexed:$index $string")
}
4. when 取代了类 C 语言的 switch 操作符。其最简单的形式如下:
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // 注意这个块
print("x is neither 1 nor 2")
}
}
5. 常规While 循环
6. 在循环中支持传统的return、break 与 continue 操作符。
函数
[访问控制符] fun 方法名(参数列表) [:返回值类型] {}
Unit 返回类型可以省略:
fun printSum(a: Int, b: Int): Unit {}
(高阶函数例)传入两个参数,并传入一个函数来实现他们不同的逻辑
fun resultByOpt(num1 : Int , num2 : Int , result : (Int ,Int) -> Int) : Int{
return result(num1,num2)
}
变长参数函数(关键字vararg)
fun hasEmpty(vararg strArray: String?): Boolean{
for (str in strArray){
if ("".equals(str) || str == null)
return true
}
return false
}
类
getter 和 setter 都是可选