1. What’s Kotlin?
– 引自百度百科
Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发。
Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。
Kotlin已正式成为Android官方支持开发语言。
官方地址:http://kotlinlang.org
中文网站:https://www.kotlincn.net
Kotlin和IntelliJ IDEA都出自同一家公司JetBrains , 因此建议使用 IntelliJ IDEA 开发 Kotlin。
2. 基础语法
声明变量
var a = 1 //自动推断类型是Int
a = 2 //OK
val b = 1
b = 2 //Error
var str: String = "hello world"
val m = intArrayOf(1,2,3)
m[0] = 4 //OK
流程控制if
使用
var x = 10
var y = 20
//简化写法
var max = if (x > y) x else y
var min = if (x < y) x else y
max = if (x > y) {
println("x > y")
x //
} else {
println("x <= y")
y //
}
min = if (x > y) {
println("x > y")
y
} else {
println("x <= y")
x
}
println("min : $min , max: $max")
流程控制 for
使用
fun main(args: Array<String>) {
var array: IntArray = intArrayOf(1,2,3)
//遍历 for(x in y)
for(item: Int in array) {
println(item)
}
println("========================")
//获取下标索引
for(i: Int in array.indices) {
println("array[$i] = ${array[i]}")
}
}
定义函数:
//main函数
fun main(args: Array<String>) {
}
//定义一个sum求和函数
fun sum(a: Int, b: Int): Int {
return a + b
}
//语法糖
fun sum2(a: Int, b: Int) = a + b
//字符串模板
fun myPrint(a: Int, b: Int) {
println("$a + $b = ${a + b}")
}
//可能返回null的特殊函数
/**
* 核心在与Int?, 类似Java8的 Optional
*/
fun convertStr2Int(str: String): Int? {
try {
return str.toInt()
} catch (ex: NumberFormatException) {
return null
}
}
fun printMultiply(a: String, b: String) {
var a2Int = convertStr2Int(a)
var b2Int = convertStr2Int(b)
//思考为啥这里写会报错
//println(a2Int * b2Int)
if (a2Int != null && b2Int != null) {
println(a2Int * b2Int) //编译器很聪明,因为if判断了,所以不会报错了
} else {
println("can't get value")
}
}
//入参是Any类型
fun convert2UpperCase(str: Any): String? {
if(str is String) { //自动识别str为字符串
return str.toUpperCase() //这里不需要强制转换了
}
return null
}
convert2UpperCase("hello world") // ⇒ HELLO WORLD
convert2UpperCase(123) // ⇒ null
when
关键字
有点类似switch case 语法,但是when是及时返回结果的。
fun main(args: Array<String>) {
println(printStr("hello"))
println(printStr("other"))
val result1 = describe("Hello")
println("describe(\"Hello\") is $result1")
println("=================")
var a = 6
var result = when (a) {
1 -> {
println("a == 1")
10
}
2 -> {
println("a == 2")
2
}
3, 4, 5 -> {
println("a == 3 or a == 4 or a == 5")
30
}
//区间
in 6..10 -> {
println("in 6 ... 10")
40
}
else -> {
println("a is other value")
50
}
}
println(result)
}
fun printStr(str: String): String {
when (str) {
"hello" -> return "HELLO"
"world" -> return "WORLD"
"hello world" -> return "HELLO WORLD"
else -> return "other input"
}
}
fun describe(obj: Any): String =
when (obj) {
1 -> "One"
"Hello" -> "Greeting"
is String -> "String"
is Long -> "Long"
!is String -> "Not a string"
else -> "Unknown"
}
区间用法
kotlin区间左右都是闭区间
/**
* range 使用小记
* Kotlin的区间是左右都是闭区间
*/
fun main(args: Array<String>) {
val a = 5
val b = 10
if(a in 2..b) {
println("in the range")
}
if (a !in 2..3) {
println("out of the range")
}
println("-------------------")
for(i in 2.rangeTo(10)) {
println(i)
}
println("-------------------")
for(i in 2..10 step 2) {
println(i)
}
println("-------------------")
//倒着遍历
for(i in 10 downTo 2 step 1) {
println(i)
}
var list = listOf("hello", "world", "hello world", "say good bye", "study kotlin")
//判断是否在区间外
if (-1 !in 0..list.lastIndex) {
println("-1 is out of range")
}
//判断在区间内
if(0 in 0..list.lastIndex) {
println("0 is in of range")
}
list.filter{ it.length > 5 }.map { it.toUpperCase() }.sorted().forEach(System.out::println)
}
3 . 其他
转义字符特殊处理
fun main(args: Array<String>) {
var s = "hello world"
// 对于 """ """ 中的字符串,特殊字符不会转义
s = """hello \n world \t"""
println(s)
}
包名的特殊性
目录与包的结构无需匹配,源代码可以在文件系统的任意位置
//包名放在文件的第一行,与目录结构无关,是逻辑的概念
package com.dcj.test