編輯:關於Android編程
在使用Kotlin進行了一段時間的Android開發之後,我深深地體驗到了它的美好,覺得是時候把它拿出來安利一下了。
Kotlin是一門編程語言,由JetBrains公司開發的。JetBrains就是那個開發了無數個牛逼IDE的公司,Android Studio就是建立在他家的Intellij之上的。
Kotlin是基於JVM的,所以開發者可以什麼方便地用它來進行Android開發——支持Kotlin和Java的混合編寫。
我覺得它之所以適合Android開發,主要是因為以下的特點:
寫了很多年的Java之後,再寫Kotlin,真是覺得如沐春風。
除了不用寫分號以及天然
支持Lambda表達式之外,它的語法本身就比Java簡潔許多。
舉幾個小例子,比如,類型推導:
val a : Int = 1 // 正常的聲明、賦值
val b = 2 // 類型推導,可以省略Int聲明
/* 定義函數:自動推導函數的返回值類型 */
fun sum(a: Int, b: Int) = a + b
字符串模板:
val name = "Barry"
val age = 15
print("My name is ${name}, I am ${age} ") // 會打印出: My name is Barry, I am 15
下面這個例子,可以對比體會一下他們的不同—— 遍歷一個列表,打印其中的奇數。
如果用java寫:
List list = Arrays.asList("H",1,3,10,5,9,20,199);
for(Object number : list){
if(!(number instanceof Integer)) {
continue;
}
if((Integer)number % 2 == 0){
System.out.println((Integer)number);
}
}
而用Kotlin的話,顯然會更清晰、簡潔、優雅(注意這裡的lambda表達式):
val list = Arrays.asList("H", 1, 3, 10, 5, 9, 20, 199)
list.filter { it is Int }
.filter { it as Int % 2 != 0 }
.forEach { println(it) }
在Kotlin中,諸如此類的語法糖還有很多:函數默認值、內聯函數、ranges、kv遍歷Map、lazy屬性、數據對象聲明、運算符重載…… 如果展開來說的話,每個都可以說很多。
當習慣這些之後,很容易就會有這種感覺:寫Kotlin相比較寫Java,就像高鐵之於綠皮火車、iPhone之於山寨機、4K屏之於800*600……沒有它之前覺得老的東西也能用,但是一旦習慣,再改回去的話就覺得渾身難受。
另外,簡潔的語法不僅使代碼讀起來清晰流暢,也讓它自然簡單易學——基本上花上半天時間,把官方文檔看上一遍,就可以開始coding了。
2.2 安全
在Java裡,我們常常要進行許多非空判斷:
public void fun1 (String str){
if(str != null) {
System.out.println("Length = " + str.length());
}
}
而在Kotlin中,即使不進行這些額外的判斷,代碼也是健壯的:
// 如果str=null,會打印:Length = null
fun fun1 (str: String?) {
println("Length = " + str?.length)
}
還有,Java中經常出現的ClassCastException,在Kotlin中,也可以通過安全的類型轉換進行避免:
val l2 = listOf("A",1,3,6,8,'c')
l2.forEach { println(it as? Int) }
2.3 函數、屬性擴展
Kotlin提供了一種方法——可以在既不需要繼承父類,也不需要使用類似裝飾器設計模式的情況下,對類進行擴展。簡直是黑科技!
比如,給String類添加一個擴展方法,用以返回它的第一個字符。只需要這樣:
// 函數擴展
fun String.firstChar() : String? {
return if(this.length > 0) this.substring(0,1) else "NULL"
}
這個擴展函數可以在任何地方聲明,然後其他任何地方String對象就都可以使用這個方法了:
val s = "Hello".firstChar()) // s的值為"H"
println("你好".firstChar()) // 打印: 你
println("".firstChar()) // 打印: NULL
2.4 兼容Java
一個語言能否被廣泛使用,除了它本身要好用之外,還要有一個良好的生態。 尤其在是如今,各種應用層的開發實際上很依賴於各種開源庫、第三方組件等,如果一個應用層的語言沒有這些支持的話,是很難被廣泛使用的。
而對於Kotlin來說,這個問題是不存在的,因為它跟Java是無縫連接的,可以相互操作。
這意味著:
Kotlin可以使用所有用Java寫的組件:(RxJava、Retrofit、EventBus、Fresco……這些都不是問題!) 在現有的用Java寫的項目中可以局部使用Kotlin,混合開發 Java->Kotlin,可以逐步遷移而不是非黑即白 使用Kotlin開發時,萬一遇到問題,可以瞬間切換回Java~
2.5 工具完善
來,我們再理一下這個關系樹:
JetBrains
|–> Intellij IDEA –> Android Studio
|–> Kotlin
Kotlin是JetBrains公司出的;JetBrains向來以做各種牛逼的IDE著稱;Android的官方開發工具AndroidStudio就是基於JetBrains公司出品的Intellij改造的。
↑ 以上是背景。
從實際體驗角度來說,Kotlin的開發也是十分方便快捷的。
只需花幾分鐘給AndroidStudio安裝一個Kotlin的擴展插件,就可以迅速開始體驗使用Kotlin的快感了。
一開始的時候,你甚至都不需要會使用Kotlin!這是因為Kotlin插件提供了一個Java->Kotlin的轉換功能,可以一鍵把現有的Java代碼轉換為Kotlin代碼,你可以通過閱讀它轉換後的Kotlin代碼,進行學習。
(實際上,我在學習Kotlin的時候,就大量使用了這種方法:當我不知道某個功能用Kotlin怎麼寫的時候,就會先用Java把它寫出來,然後使用轉換功能,生成Kotlin代碼,從而就知道了Kotlin的寫法)
3. 如何開始
因為是一篇純粹的說明文,所以我把如何開始單獨抽離出來,寫了這篇文章:《只需五分鐘,開始使用Kotlin開發Android》
不得不說,當不了解一件事情的時候,就會像當然的認為,其很神秘。但是當真正的接觸到了這些神秘的item,就不會有這種感覺了。作為一個android開發新手的我,剛接觸到了V
百度了下,好像都沒找到想要的,或許是我百度錯了關鍵字吧。我這就介紹一種我現在剛學的方法。首先web端費給我們一個接口文檔。我這就接觸到兩塊內容:(1)通過接口傳遞單純的數
Fragment和Activity的交互 一個Fragment的實例總是和包含它的Activity直接相關。 fragment可以通過getActivity
因為案例比較簡單,所以簡單用AndroidApplication -> Game -> Stage 搭建框架 一、主入口,無特殊 復制代碼 代碼如下: pub