Kotlin 進階之路 目錄
1.控制流
/**
*用來檢查和運算各種條件和邏輯的組合,控制App的運行流向
* 循環(huán):for晨横,while 及循環(huán)控制
* if:二元判斷
* when:細致化判斷
* */
fun main(args: Array<String>) {
println("----------------依次操作一個序列(如集合類型)中的每一項----------------")
//for:1.依次操作一個序列(如集合類型)中的每一項洋腮,執(zhí)行次數(shù)是可預測的
val numbers = arrayOf(1, 2, 3, 4)
for (number in numbers) {
println(number)
}
println("----------------重復執(zhí)行----------------")
// 2.重復執(zhí)行:for(a in 1..10){//操作}
for (n in 1..3) {
println(n)
}
println("----------------while:循環(huán)執(zhí)行----------------")
//while:循環(huán)執(zhí)行一系列操作,直到條件不成立,適合執(zhí)行次數(shù)未知的場合
var number = 1
while (number < 5) {
number++
println("hello")
}
//循環(huán)中的控制:continue 結(jié)束本次循環(huán) ,break 結(jié)束整個循環(huán)
println("----------------結(jié)束本次循環(huán):continue----------------")
val numbers2 = arrayOf(1, 2, 3, 4)
for (number in numbers2) {
if (number == 2) {
break
}
println(number)
}
println("----------------結(jié)束整個循環(huán):break----------------")
var number2 = 1
while (number2 < 5) {
number2++
if (number2 == 3) {
break
}
println("hello")
}
//if:條件判斷語句颠焦,整合語句本身是一個表達式
println("----------------條件判斷語句:if----------------")
val a = 3
val b = 5
val result = if (a > b) "a大于b" else "a小于b"
println(result)
//when:可對某個變量的大小/范圍/值表達式/類型等進行判斷
println("----------------條件判斷語句:if----------------")
val c = 11
when (c) {
in 0..10 -> {
println("在0到10之間")
}
11,13,15 -> {
println("屬于11,13,15中的值")
}
is Int -> {
println("c屬于整數(shù)")
}
else -> {
println("c屬于String類型")
}
}
}
----------------依次操作一個序列(如集合類型)中的每一項----------------
1
2
3
4
----------------重復執(zhí)行----------------
1
2
3
----------------while:循環(huán)執(zhí)行----------------
hello
hello
hello
hello
----------------結(jié)束本次循環(huán):continue----------------
1
----------------結(jié)束整個循環(huán):break----------------
hello
----------------條件判斷語句:if----------------
a小于b
----------------條件判斷語句:if----------------
屬于11,13,15中的值
2.函數(shù)
/**
* 函數(shù)是有名字的一段代碼
* 包含參數(shù)和返回值(可選),參數(shù)可以默認值
*/
fun main(args: Array<String>) {
//F1函數(shù)名看文檔
//調(diào)用時可打參數(shù)名粟害,可讀性更好(但調(diào)用Java函數(shù)無效)
println("----------------類似于C++ 給參數(shù)一個默認值----------------")
val a = add(3)
println(a)
println("----------------正常調(diào)用----------------")
val b = add(3, 5)
println(b)
println("----------------可變參數(shù) 傳遞元素----------------")
println(sum(1,2,3,4,20))
println("----------------可變參數(shù) 傳遞數(shù)組*Array----------------")
val c = intArrayOf(1,2,3,4,20)
println(sum(*c))
}
/**
* Any 任意類型
* Int 整型
* : Int 意味著返回整型
*/
fun add(x: Int, y: Int = 1): Int {
return x + y
}
//可變參數(shù)修飾符vararg
fun sum(vararg x: Int): Int {
var total = 0
for (i in x) {
total += i
}
return total
}
----------------類似于C++ 給參數(shù)一個默認值----------------
4
----------------正常調(diào)用----------------
8
----------------可變參數(shù) 傳遞元素----------------
30
----------------可變參數(shù) 傳遞數(shù)組*Array----------------
30
3.初識lambda與高階函數(shù)
/**
* 高階函數(shù):1參數(shù)或返回值的類型是函數(shù)型
* 函數(shù)型:(參數(shù)) -> 返回值
* lambda:一種無名函數(shù)的簡寫 { (參數(shù)) -> 函數(shù)執(zhí)行語句}
* 其它語言稱閉包估蹄,即有能力訪問其自身范圍外的變量
*/
fun main(args: Array<String>) {
//高階函數(shù):描述任務的結(jié)果,而不是使用循環(huán)詳細的推算
println("----------------map:常用與對集合類型的元素類型整體轉(zhuǎn)變----------------")
//map:常用與對集合類型的元素類型整體轉(zhuǎn)變
//其lambda中參數(shù)的約定稱為it
val a = arrayOf(1,2,3,4,5,6,7,8)
val b = a.map { "變?yōu)?$it" }
for (s in b){
println(s)
}
println("----------------filter:對集合類型進行篩選----------------")
//filter:對集合類型進行篩選
val c = a.filter { it %2 ==0 }
for (i in c) {
println(i)
}
println("----------------filter使用:對篩選數(shù)求和----------------")
var sum = 0
a.filter { it %2 ==0 }.forEach{
sum+=it
println(it)
}
println("求和:$sum")
}
----------------map:常用與對集合類型的元素類型整體轉(zhuǎn)變----------------
變?yōu)?1
變?yōu)?2
變?yōu)?3
變?yōu)?4
變?yōu)?5
變?yōu)?6
變?yōu)?7
變?yōu)?8
----------------filter:對集合類型進行篩選----------------
2
4
6
8
----------------filter使用:對篩選數(shù)求和----------------
2
4
6
8
求和:20