学点kotlin,这辈子也是有了(1/n)
Kotlin不会一点
-
声明:
val, var(mutable)
-
基本数据类型(基本大差不差)
- 数字:
Int, Uint(32u), Long(1_000_000)Float(3.14f), Double
- 字符串
Char, StringString自带length属性String有着.startwWith() .lastWith()方法
- 特殊对象
List -> listOf与mutableListMap -> mapOf与mutableMap
- 数字:
-
基本控制流
-
分支控制:
-
if:if只能放Boolean来进行判断,可以用类似C的val c: Int = if(a < b) a else b -
when(obj):多分支,类似switch(),但是使用val1 -> { fun1() } else { fun2() }格式进行操作-
可支持下列用法:可是与
switch不同,其每个分支自带了breakfun main() { val trafficLightState = "Red" // This can be "Green", "Yellow", or "Red" val trafficAction = when { trafficLightState == "Green" -> "Go" trafficLightState == "Yellow" -> "Slow down" trafficLightState == "Red" -> "Stop" else -> "Malfunction" } println(trafficAction) // Stop } // 另外还有经典用法 fun main() { for (number in 1..100) { println( when { number % 15 == 0 -> "fizzbuzz" number % 3 == 0 -> "fizz" number % 5 == 0 -> "buzz" else -> "$number" } ) } }
-
-
-
循环控制:
Ranges:1..4 == 1, 2, 3, 4、1..<4 == 1, 2, 3、4 downTo 1 == 4, 3, 2, 1、1..5 step 2 == 1, 3, 5(Char也可以)
Loops:for(num in 1..5)或者for(cake in cakes)遍历val cakes = listOf("1", "2")while和do-while
-
-
函数:看了那么多
main()已经知道了吧【kotlin建议使用驼峰命名】-
exp如下,factory function概念:可以返回对象的函数fum sum(x: Int, y: Int): Int { return x + y } -
参数注意事项:
-
函数参数传入顺序:
fun printMessageWithPrefix(message: String, prefix: String) { println("[$prefix] $message") } fun main() { // Uses named arguments with swapped parameter order printMessageWithPrefix(prefix = "Log", message = "Hello") // [Log] Hello // 这就意味着可以像python一样指定传入顺序 } -
默认参数:命名时可以指定函数参数值
fun printMessageWithPrefix(message: String, prefix: String = "Info")(C++那样的操作) -
Unit函数:不返回函数参数值,可以省去返回值类型的声明 -
单表达式函数:可
fun sum(x: Int, y: Int) = x + y来声明(除了Unit类型)
-
-
lambda表达式:我觉得每个人都恨这个 Functions | Kotlin Documentation,官方以下几种:-
作为另一个函数的参数执行
lambda表达式:val fun = { text: String -> text.uppercase() },将text内容大写- 进行筛选(单参数甚至无需声明类型):
val positives = numbers.filter ({ x -> x > 0 }) - 必须定义参数类型或仅有一种类型
- 进行筛选(单参数甚至无需声明类型):
-
返回一个
lambda表达式:这里使用了map遍历数组作为函数参数val numbers = listOf(1, -2, 3, -4, 5, -6) val doubled = numbers.map { x -> x * 2 } val isTripled = { x: Int -> x * 3 } val tripled = numbers.map(isTripled) println(doubled) // [2, -4, 6, -8, 10, -12] println(tripled) // [3, -6, 9, -12, 15, -18] -
lambda表达式嵌套:val numbers = listOf(1, -2, 3, -4, 5, -6) val doubled = numbers.map { x -> x * 2 } val isTripled = { x: Int -> x * 3 } val tripled = numbers.map(isTripled) println(doubled) // [2, -4, 6, -8, 10, -12] println(tripled) // [3, -6, 9, -12, 15, -18]-
假如说嵌套的
lambda函数不返回值,那也要() -> Unit -
还有继承另一函数分支的用法:
fun toSeconds(time: String): (Int) -> Int = when (time) { "hour" -> { value -> value * 60 * 60 } "minute" -> { value -> value * 60 } "second" -> { value -> value } else -> { value -> value } } fun main() { val timesInMinutes = listOf(2, 10, 15, 1) val min2sec = toSeconds("minute") val totalTimeInSeconds = timesInMinutes.map(min2sec).sum() println("Total time is $totalTimeInSeconds secs") // Total time is 1680 secs } -
立即执行:在
{}后添加()进行立即调用println({ text: String -> text.uppercase() }("hello")) // HELLO -
Trailing lambda不懂
-
-
-
-
类
class:- 定义类:
class User(val name: String, var id: Int)- 当属性不使用
val和var声明时,其不可被访问 - 对象实例化:
val contact = Contact(1, "mary@gmail.com") - 属性访问使用
. - 成员函数
- 当属性不使用
- 数据类
data class User(val name: String, val id: Int)- 预定义函数
toString(), equals() or ==, copy()println(User)=>User(name=Alex, id=1)
- 预定义函数
- 定义类:
-
Null安全:Null safety | Kotlin Documentation,大致就是说这个语言实际上为空值安排了内存空间(不会出现到处跑的局面)-
Nullable types:可以赋值为null的变量var nullable: String? = "You"声明 -
安全调用:基于
Nullable类型基础上,将可能为null都标上? -
Elvis operator(?:):可以使用这个操作符比较是否为nullfun main() { val nullString: String? = null println(nullString?.length ?: 0) // 0 }
-

浙公网安备 33010602011771号