Kotlin基礎(chǔ)學(xué)習(xí)之循環(huán)和異常
前言
Kotlin并沒有想象中的那么牛逼哄哄,也并不難,我更喜歡把他看做一枚語法糖,所謂的語法糖就是:能夠讓代碼變得更加簡單易讀的輔助工具。而工具這種東西,看看說明書,實操幾遍基本就能掌握,都是記憶性的東西,熟能生巧。如果你的Java基礎(chǔ)扎實,看看Kotlin的開發(fā)文檔,寫寫Demo,分分鐘就上手了。
說到這個Kotlin提升寫代碼效率,還是談?wù)剮讉€最直觀簡單的例子吧:
1.不用再去 findViewById 或者 @BindView,拿到控件id直接用
2.不用再為 Bean 寫一堆 getter 和 setter 方法
3.支持Java 8提供的新特性,Lambda表達式,函數(shù)式接口,流API等 ...
引言
在 Kotlin 的循環(huán)語句中,while 循環(huán)還有 do...while 循環(huán)和 Java 中是一致的,在這里就不再細說,而for 循環(huán)則和 Java 中有了很大的區(qū)別,異常處理也有了不同。
迭代數(shù)字
Java 中的 for 循環(huán),總是先初始化值,判斷值是否在限定的范圍內(nèi),在每一次循環(huán)更新值,一直到超出范圍。
而在 Kotlin 中,for 循環(huán)沒有這樣的用法,但是為了替代這種常見用法,Kotlin 使用了區(qū)間的概念。
區(qū)別在本質(zhì)上就是兩個值之間的間隔,一個初始值,一個結(jié)束值,使用 .. 運算符表示,通常是數(shù)字。
val oneToTen = 0..10
上面的表達式等同于 Java 中 0 < oneToTen <= 10
。
Kotlin 中的區(qū)間是閉合的,結(jié)束值始終是區(qū)間的一部分。
那么舉一個例子,如何使用 for 循環(huán)打印 0~100 之間的數(shù)字呢?
for(i in 0..100) { println(i) } >> 0 >> 1 >> 2 ... >> 100
在這里,i 的初始值是0,結(jié)束值是100。等同于 Java 代碼。
/* Java */ for(int i = 0; i <= 100; i++) { println(i); }
這時來了新的需求,要求倒序打印從100~0的數(shù)字,并要求只打印偶數(shù)。
for(i in 100 downTo 0 step 2) { println(i) } >> 100 >> 98 >> 96 ... >> 0
這里我們可以看到使用了 downTo 和 step,見名知意,downTo 表示從100 到 0 倒序,step 表示間隔,不寫默認step 1。等同于 Java 代碼。
/* Java */ for(int i = 100; i >= 0; i-=2) { println(i); }
迭代集合
不管是在 Java 中還是在 Kotlin 中,for 循環(huán)使用最多的場景還是對集合的迭代。
首先我們來看看在 Java 中迭代一個 Map 集合,并將鍵值對打印出來。
/* Java */ HashMap<Integer, String> map = new HashMap<>(); map.put(1, "100"); map.put(2, "200"); Set<Integer> keySet = map.keySet(); for (int key : keySet) { System.out.println(" key:" + key + " value:" + map.get(key)); } >> key:1 value:100 >> key:2 value:200
Java 中要先獲取鍵的集合,遍歷鍵的集合,獲取對應(yīng)值。
那么 Kotlin 中如何遍歷呢?
/* Kotlin */ val map = hashMapOf<Int, String>()\ map[1] = "100" map[2] = "200" for((key, value) in map) { println(" key:$key value:$value") } >> key:1 value:100 >> key:2 value:200
怎么樣,是不是方便了很多。
同時,上面的代碼中還有另一個簡單的小技巧:你可以用map[key]
來獲取值,也可以用map[key] = value
來設(shè)置值,而不用調(diào)用get()
put()
方法。
.. 語法不僅可以創(chuàng)建數(shù)字區(qū)間,也可以創(chuàng)建字符區(qū)間 val aTof = 'a'..'f'
如果要迭代一個 list 集合,在 Java 中要這么做:
/* Java */ ArrayList<String> ls = new ArrayList<>(); ls.add("100"); ls.add("200"); // 只是迭代集合,打印集合中的數(shù)據(jù) for(String str : ls) { System.out.println(str); } >> 100 >> 200 // 打印集合數(shù)據(jù)同時明確數(shù)據(jù)對應(yīng)的下標(biāo) for(int i = 0; i < ls.size(); i++) { System.out.println("index:" + i + " value:" + ls.get(i)); } >> index: 0 value: 100 >> index: 1 value: 200
接下來使用 Kotlin 實現(xiàn):
/* Kotlin */ val ls = arrayListOf<String>() ls.add("100") ls.add("200") for (i in 0 until ls.size) { println("index:$i value:${ls[i]}") } >> index: 0 value: 100 >> index: 1 value: 200 for ((index, value) in ls.withIndex()) { println("index:$index value:$value") } >> index: 0 value: 100 >> index: 1 value: 200
這里我們又使用了一個新的方法 until,其等同于0..ls.size-1
,同樣的,我們也可以使用 withIndex 方法來達到和 map 集合遍歷一樣的效果,同時獲取鍵和值。
Kotlin 中使用 in 來檢查一個值是否在區(qū)間中,或者它的逆運算 !in。同時 in 也可以作為 when 的分支。
fun checkChar(c: Char) = when(c) { in '0'..'9' -> "number" in 'a'..'z', in 'A'..'Z' -> "string" else -> "don't know" }
Kotlin 中的異常
Kotlin 中的異常處理和 Java 中大致相同。
同時 Kotlin 中的 throw 結(jié)構(gòu)以及 try...catch 結(jié)構(gòu)和 Kotlin 中的 if 語句一樣是表達式,可以作為另一個表達式的一部分使用。
val num = if(n in 0..100) { n } else { throw IllegalArgumentException("The num value must between 0 and 100!") } // 將一個字符串轉(zhuǎn)換成數(shù)字,若不是數(shù)字,返回 null fun transform(str: String) : Int? { try { return str.toInt() } catch(e: NumberFormatException) { return null } } // 上面的方法可以寫作表達式體函數(shù) fun transform(str: String) = try { str.toInt() } catch(e: NumberFormatException) { null }
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Android判斷用戶是否允許了攝像頭權(quán)限實例代碼
本篇文章主要介紹了Android判斷用戶是否允許了攝像頭權(quán)限實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04Android編程心得分享——JSON學(xué)習(xí)過程
在我們初步學(xué)習(xí)JSON時我們都知道JSON作為現(xiàn)在比較流行的數(shù)據(jù)交換格式,有著它的許多優(yōu)點,這里將我學(xué)習(xí)JSON的過程記錄如下2013-06-06Android開發(fā)之ToggleButton實現(xiàn)開關(guān)效果示例
這篇文章主要介紹了Android開發(fā)之ToggleButton實現(xiàn)開關(guān)效果的方法,結(jié)合實例形式分析了ToggleButton控件實現(xiàn)開關(guān)效果的布局與功能相關(guān)操作技巧,需要的朋友可以參考下2017-07-07Android開發(fā)中比較耗時的一些操作小結(jié)
這篇文章主要介紹了Android開發(fā)中比較耗時的一些操作小結(jié),本文根據(jù)實際開發(fā)經(jīng)驗總結(jié)了6條比較耗時的編程操作,請大家注意下,需要的朋友可以參考下2015-06-06