Kotlin基礎
1.函數也是對象,可以作為參數和返回值
2.使用駝峰命名,盡量避免下劃線
3.public函數應當有說明文檔
4.lambda中花括號內前後都應該有空格
5.空值安全檢查 var s: String? = null;當一個變量允許為空值時,必須使用?來聲明
6.當?:左邊表達式不為空時,返回表達式的值,否則執行?:右邊表達式的值
7.as? 安全類型轉換,轉換失敗會返回null
8.lambda表達式相當於一個函數 fun add(x :Int,y :Int) : Int = x + y
lambda可寫成 val add(Int , Int) -> Int = { x , y -> x + y }
9.沒有返回值的函數,顯式指定Unit為返回值
10.is運算符來檢查數據類型和類型轉換
11.in操作符檢查一個數是否在某個範圍內
12.vararg 可變參數
13.$字符串模版
14.位運算符: or 或 / and 與 / shl有符號左移 / shr 有符號右移 / ushr 無符號右移 / xor 按位異或 / inv 按位取反
15.downTo 遞減,循環可用,每次減1
16.step 步長 ,循環時可用,設置每次循環的增加或減少的量
17.when kotlin中增強版的switch,可以匹配值,範圍,類型與參數
18.數據類型
Double 64
Float 32
Long 64
Int 32
Short 16
byte 8
①沒有自動向上轉型
②Long類型結尾必須是大寫的L,不能為小寫
③字符Char不是Number,用單引號來聲明
④Boolean的值為true或false
⑤Kotlin不支持8進制, 十六進制0x開頭,二進制0b開頭
⑥位運算符
19.數組
Kotlin中使用Array類表示數組,需要註意一點:[]訪問數組元素在這裏實際上是進行了操作符的
創建數組:定長數組 val fixedSizeArray = arrayOfNulls<Int>(10)
空數組 val empty = emptyArray<Int>()
裝箱操作 val arr = arrayOf(1,2,3) //還有其他比如 IntArrayOf,BooleanArrayOf
閉包初始化
訪問數組:使用[]
遍歷數組:for(i in array) print(i)
根據下標遍歷:for(i in array.indices) print(array[i]) //indices 代表下標 !範圍(0<=indices <數組size)
20.流程控制
Kotlin中的if-else: val min = if(a<b) a else b
val min = if(a<b) "a比較大“ else b
val min = if(a<b) "a比較大“ else Unit
在if語句塊的最後可以自動返回最後一行表達式的值,而不需要寫return
21.異常
Kotlin沒有檢驗異常,它的throw和try都是表達式,意味著它們可以賦值給某個變量,這點在處理邊界問題的時候很有用。
22.集合
跟據是否可變分為:不可變集合與可變集合,後者在前者的前面加上 Mutable
列表:List/ MutableList
集:Set/MutableSet
映射:Map/MutableMap
集合:Collection/MutableCollection
叠代器:Iterable/MutableIterable
list:
空List val emptyList = emptyList<String>()
普通List val list = listOf(1,2,3)
可修改的List val mList = mutableListOf(1,2,3)
Set:
空set val emptySet = emptySet<String>()
普通set val set = setOf(1,2,3)
可變的set val mSet = mutableSetOf(1,2,3)
HashSet val hashSet = hashSetOf(1,2,3)
LinkedSet val linkedSet = linkedSetOf(1,2,3)
SortedSet val sortedSet = sortedSetOf(1,2,3)
map:
這的鍵值對用 to 關鍵字 , key to value
空Map val emptyMap = emptyMap<Int,String>()
普通map val map = mapOf(1 to "coder",2 to "pig")
可變的map val mMap = mutableMapOf(1 to "coder",2 to "pig")
HashMap val hashMap = hashMapOf(1 to "coder",2 to "pig")
LinkedMap val linkedMap = linkedMapOf(1 to "coder",2 to "pig")
SortedMap val sortedMap = sortedMapOf(1 to "coder",2 to "pig")
23.強勢的集合操作符
總數操作符、過濾操作符、映射操作符、順序操作符、生產操作符、元素操作符
總數操作符:
any---判斷集合中是否有滿足條件的元素
all---判斷集合中的元素是否都滿足條件
none---判斷集合是否都不滿足條件,是則返回true
count---查詢集合中滿足條件的元素個數
reduce---從第一項到最後一項進行累計
reduceRight---從最後一項到第一項進行累計
fold---與reduce類似,不過有初始值,而不是從0開始累計
foldRight---和reduceRight類似,有初始值,而不是從0開始累計
forEach---循環遍歷元素,元素是it,可對每個元素進行相關操作
forEachIndexed---循環遍歷元素,同時得到元素index(下標)
max---查詢最大的元素,如果沒有則 返回null
maxBy---獲取方法處理後返回結果最大值對應的哪個元素的初始值,如果沒有則返回null
min---查詢最小值
minBy---同maxBy
sumBy---獲取方法處理後返回結果值的總和
dropWhile---返回從第一項起,去掉滿足條件的元素,直到不滿足條件的一項為止
過濾操作符:過濾後會返回一個處理後的列表結果,但不會改變原列表
filter---過濾掉所有滿足條件的元素
filterNot---過濾所有不滿足條件的元素
filterNotNull---過濾NULL
take---返回從第一個開始的n個元素
takeLast---返回從最後一個開始的n個元素
takeWhile---返回不滿足條件的下標前面的所有元素的集合
drop---返回去掉前N個元素後的列表
dropLastWhile---返回從最後一項起,去掉滿足條件的元素,直到不滿足條件的一項為止
slice---過濾掉非指定下標的元素,即暴力下標對應的元素過濾list中指定下標的元素
映射操作符:
map---將集合中的元素通過某個方法轉換後的結果存到一個集合中
mapIndexed---除了得到轉換後的結果,還可以拿到index(下標)
mapNotNull---執行方法轉換前過濾掉為Null的元素
flatMap---合並兩個集合,可以在合並的時候做些小動作
groupBy---將集合中的元素按照某個條件分組,返回map
順序操作符:
reversed---相反順序
sorted---自然排序(升序)
sortedBy---根據方法處理結果進行自然排序
sortedDescending---降序排序
sortedByDescending---根據方法處理結果進行降序排序
生產操作符:
zip---兩個集合按照下標組合成一個個的Pair塞到集合中返回
partition---根據判斷條件是否成立,拆分成兩個Pair
plus---合並兩個list,可以用“+“替代
unzip---將包含多個Pair的List轉換成含List的Pair
元素操作符:
contains---判斷集合中是否有指定元素,有返回true
elementAt---查找下標對應的元素,如果下標越界會拋IndexOutOfBoundsException
elementAtOrElse---查找下標對應元素,如果越界會根據方法返回默認值
elementAtOrNull---查找下標對應元素,越界會返回Null
first---返回符合條件的第一個元素,沒有拋NoSuchElementException
firstOrNull---返回符合條件的第一個元素,沒有返回null
indexOf---返回指定下標的元素,沒有返回-1
indexOfFirst---返回第一個符合條件的元素的下標,沒有返回-1
indexOfLast---返回最後一個符合條件的元素下標,沒有返回-1
last---返回符合條件的最後一個元素,沒有拋NoSuchElementException
lastIndexOf---返回符合條件的最後一個元素,沒有返回-1
lastOrNull---返回符合條件的最後一個元素,沒有返回null
single---返回符合條件的單個元素,如果沒有符合或超過一個,拋異常
singleOfNull---返回符合條件的單個元素,如果沒有符合或超過一個,返回null
Kotlin基礎