Kotlin
一、介绍
Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发。
Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。
Kotlin 已正式成为Android官方支持开发语言。
2016年2月15日 Kotolin v1.0(官方稳定版) 发布。
2017谷歌I/O大会上,谷歌宣布,将Kotlin语言作为安卓开发的一级编程语言。
Android Studio 3.0 内置支持Kotlin
二、基础
1.基本类型
在 Kotlin 中, 所有东西都是对象,就是说任何变量都可以调用成员函数和属性。
- 数字
Type | Bith width |
---|---|
Double | 64 |
Float | 32 |
Long | 64 |
Int | 32 |
Short | 16 |
Byte | 8 |
Float 使用 f
或者 F
标记 :123.5f
- 字符用
Char
类型标示。它们不能直接当做数字 - 布尔用
Boolean
类型表示。 - 字符串用
String
类型表示。
Kotlin 有两种类型的字符串字面值:转义字符串可以有转义字符,原生字符串可以包含换行和任意文本。
转义字符串和 Java 字符串类似:
val s = "Hello, world!\n"
原生字符串使用 """
三个引号分界符括起来,内部没有转义并且可以包含换行和任何其他字符。
val text = """
for (c in "foo")
print(c)
"""
- Array 数组
var nums= arrayOf(1,2,3)
2. 类型
2.1 变量
Kotlin 的变量分为 var
(可变的) 和 val
(不可变的)
变量声明:
var num1: Int = 1
var num2 = 2 //自动推断
var num3: Int
num3 = 3
2.2. 可空值及Null 检测
当某个变量可以为 null 的时候,必须在声明处的类型后添加 ? 来标示
可空之后会进行装箱操作,也就是说如果是一个数值类型的话那么可空之后则是一个引用类型
var num: Int?
null 检测之后,如果检测通过那么对应变量会自动转换为非空值
var num: Int?
if(num!=null){ prinltln(num) } //
2.3 类型检测及自动类型转换
is
运算符检测一个表达式是否某类型的一个实例。
检测通过后的分支可以直接当做该类型使用,而不需要再显示转换。
if (obj is String) {
var length = obj.length
}
3. 流程控制
(1) If
在Kotlin中 If
是一个表达式,它会返回一个值。可以代替三元运算符来使用。
val max = if (a > b) a else b
If 分支可以是代码块,最后的表达式作为该块的值:
val max = if (a > b) {
print("Choose a")
a
} else {
print("Choose b")
b
}
(2) When
when
取代了 类 C 语言的 switch 操作符。
when
既可以当做表达式使用也可以当做语句使用。
var result = when (obj) {
1 -> "One"
2, 3 -> "One or Two"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a string"
else -> "Unknown"
}
4.编码规范
1.类规范
通常一个类的内容按照以下顺序排列:
- 属性声明与初始化块
- 此构造函数
- 方法声明
- 伴生对象
2.命名规范
Kotlin 遵循Java 命名规范
类和对象的名称以大写字母开头并使用驼峰。
函数、属性和局部变量的名称以小写字母开头、使用驼峰且不适用下划线。
常量名称使用大写、下划线分隔。
三、Kotlin集合
1.介绍
Kotlin 分为可变集合和不可变集合,这样有助于消除bug和设计良好的API.
主要有三种类型: list、set、map
2.集合遍历
遍历 map/pair 型 list
for ((k, v) in map) { println("$k -> $v") }
遍历 list , 包含索引和值 (.withIndex())
var items = listOf("a", "b", "c") for ((index, value) in items.withIndex()) { println("$index : $value") }
遍历 list
val items = listOf("apple", "banana", "kiwi") //Type1 for (item in items) { println(item) } //Type2 for (index in items.indices) { println("item at $index is ${items[index]}") }
4.lambda 对集合的操作
val fruits = listOf("banana", "avocado", "apple", "kiwi")
fruits.filter { it.startsWith("a") }
.sortedBy { it }
.map { it.toUpperCase() }
.forEach { println(it) }
四、其他
1. Range 区间
使用 in
关键子来检测某个数字是否在制定区间内
for (i in 1..100) { …… } // 闭区间: 包含 100 , 等同于 i>=1 && i<=100
for (i in 1 until 100) { …… } // 半开区间: 不包含 100
for (x in 2..10 step 2) { …… }
for (x in 10 downTo 1) { …… }
if (x in 1..10) { …… }
2.需要注意的知识点:
==
和===
== : 比较的是值
===: 比较的是地址
在Kotlin中操作符==
会被编译器翻译成调用 equals()
函数
- 通过
?
标示为可空后为引用类型
3.简单技巧:
1.字符串模板 ($+变量名称)
var str = "abc"
val s1 = "String : $str"
val s2 = "String : ${str.toUpperCase()}" // 模板中的任意表达式
- ?: (如果左侧为null 则返回右侧)
var str: String="str"
var str2 =str?:"Test"
- ?. (左侧不为null则执行返回右侧属性)
- !! (左侧不为null则执行右侧方法)
One comment