有關(guān)kotlin
kotlin的簡介
kotlin是一個基于JVM的新的編程語言,與Java相比,Kotlin的語法更簡潔、更具表達(dá)性,而且提供了更多的特性,比如,高階函數(shù)、操作符重載、字符串模板。它與Java高度可互操作,可以同時用在一個項(xiàng)目中。官網(wǎng)上的總結(jié):
- 簡潔 :減少樣板代碼是數(shù)量
- 安全 :避免空指針
- 通用:可構(gòu)建服務(wù)器,Android應(yīng)用,前端程序
- 互操作性:與java 100%互操作
- 工具化:隨意選擇編譯方式
kotlin的優(yōu)勢
1.線程切換
java:handler不僅寫法繁瑣 而且容易引起內(nèi)存泄漏
kotlin:
2.getter setter
java :
public class Person{
private int id;
private String name;
//瞅啥瞅,省略掉的是 getter 和 setter!
...
}
kotlin:
data class Person(val id: Int, val name: String)
3.空指針
java中常需要如下判空:
if(x != null) x.y();
Person person = findPersonFromCacheOrCreate();
if(person!=null)
person.setName("橘右京");
kotlin:String 表示一個不可為 null 的字符串類型,如果返回null代碼即會報(bào)錯
fun findPersonFromCacheOrCreate(): String{
...
}
String 已經(jīng)確定是不會為空,一定有值;而 String?則是未知的,也許有值,也許是空。在使用對象的屬性和方法的時候,String 類型的對象可以毫無顧忌的直接使用,而 String?類型需要你先做非空判斷。
fun demo() {
val string1: String = "string1"
val string2: String? = null
val string3: String? = "string3"
println(string1.length) //7
println(string2?.length) //null 不會報(bào)空 注意string2后面的"?",等于判空如果不加編輯器會提醒報(bào)錯
println(string3?.length) //7
}
盡管 string2 是一個空對象,也并沒有因?yàn)槲艺{(diào)用了它的屬性/方法就報(bào)空指針。而你所需要做的,僅僅是加一個"?"(等于判空)。
4.Smart Cast
java:不夠聰明,不建議強(qiáng)轉(zhuǎn)但有些情況不可避免
if(view instanceof ViewGroup){
((ViewGroup) view).addView(child);
}
kotlin:
if(view is ViewGroup){
view.addView(child) // 現(xiàn)在 Kotlin 已經(jīng)知道 view 是 ViewGroup 類型了!
}
5.方法可擴(kuò)展
判別是否為空字符串:
java:
public class StringUtils{
public static boolean notEmpty(String str){
return !"".equals(str);
}
public static boolean isEmpty(String str){
return "".equals(str);
}
}
kotlin:添加String的拓展方法
fun String.isEmpty():boolean{
return this=="";
}
6.替代butterknife
7.SharedPreferences 持久化
如同讀寫內(nèi)存一樣簡單直接:
var name by Preference(context, "name", "橘右京", "sp_name")
...
Log.d(TAG, name) // 第一次讀取,只能讀取到默認(rèn)值,那就是 橘右京
name = "不知火舞"
Log.d(TAG, name) // 這里輸出的就是 不知火舞 啦
8.一個關(guān)鍵字實(shí)現(xiàn)單例
object Log {
fun i(string: String) {
println(string)
}
}
fun main(args: Array<String>) {
Log.i("test")
}
問題
1.需要理解函數(shù)式編程,學(xué)習(xí)成本相對較高
2.代碼混淆時需注意一些坑
3.Android library 不建議使用kotlin 會有額外的大小以及編譯異常的問題
總結(jié)
根據(jù)項(xiàng)目實(shí)際情況考慮引入kotlin的可行性,可以由淺入深,比如先從JavaBean入手 。以上內(nèi)容可能不太全面,感興趣的可以在以下參考資料中繼續(xù)了解。
參考資料
帖子:
http://www.lxweimin.com/p/8a1fce6fa93a
https://zhuanlan.zhihu.com/p/24900005
文檔:
https://github.com/huanglizhuo/kotlin-in-chinese
項(xiàng)目:
https://github.com/githubwing/GankClient-Kotlin
https://github.com/antoniolg/Bandhook-Kotlin