為什麼Kotlin比Java能大量減少程式碼
簡要介紹
使用Kotlin已經有好一段時間了,一直在想,到底Kotlin厲害在哪裡,為什麼我要從Java轉到Kotlin上,特此整理一下Kotlin的一些優點. 本文專注Kotlin是如何減少程式碼書寫的.
1. 簡化空物件的處理(防止空指標)
val userName = a?.b?.c?.d ?: ""
詳細文件,可參考:《利用Kotlin優雅的解決Java的空指標問題
》
2. 屬性訪問,代替Get/Set方法
- Kotlin程式碼
class User { var name :String?=null }
- Java程式碼
public class User { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
檢視為什麼Kotlin屬性訪問方式比Java的Get/Set方式好 瞭解更多
3. 預設建構函式
- Kotlin程式碼
class User(var name: String)
- Java程式碼
public class User { private String name; public User(String name) { this.name = name; } public String getName() { return name.toUpperCase(); } public void setName(String name) { this.name = name.toUpperCase(); } }
4. 快速建立List/Map集合型別
1) List
a) Kotlin程式碼
可變list
val list = listOf("a","b","c")
可變list
val list = mutableListOf("a","b","c")
b) Java程式碼
ArrayList list = new ArrayList(); list.add("a"); list.add("b"); list.add("c"); return list;
2) Map
a) Kotlin
不可變Map
val map = mapOf("key1" to "a", "key2" to "b")
可變Map
val map = mutableMapOf("key1" to "a", "key2" to "b")
b) Java
Map<String, String> map = new HashMap<String, String>(); map.put("key1", "a"); map.put("key2", "b");
5. 物件屬性呼叫簡化(使用with、apply、let等)
- Kotlin程式碼(可避免重複寫物件的名字)
val user = User() with(user) { name = "jerry" age = 18 }
- Java程式碼
User user = new User(); user.setName("jerry"); user.setAge(18);
6. 安卓自動繫結xml檔案中控制元件定義
不再需要使用findViewById或ButterKnife,使用樣例:
import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { ..... textView.text = "hello" } }
詳細文件,可參考:《使用Kotlin Android Extensions代替ButterKnife和findViewById 》
7. 簡化Parcelable實現
import android.os.Parcelable import kotlinx.android.parcel.Parcelize @Parcelize class User(var age: Int,var name: String): Parcelable
詳細文件,可參考:《Kotlin快速通過Parcelable在intent間傳遞物件 》
8. 協程coroutines
協程最主要的優點還不在於減少程式碼,而在於使呼叫邏輯簡化,使得我們不必使用AsyncTask或者RxJava這樣複雜的方案.
GlobalScope.launch { doSomething() withContext(Dispatchers.Main) { textView.text = "coroutines完成執行" Toast.makeText(this@MainActivity, "coroutines hooray", Toast.LENGTH_SHORT).show() } }
詳細文件,可參考:《安卓最好的非同步任務執行框架:kotlin協程(coroutines) 》
9. 簡化單例物件構造
- Kotlin程式碼(定義類名時採用object即可)
object User { fun test() { } }
- Java程式碼
public final class User { public static final User instance = new User(); public void test() { } public static User getInstance() { return instance; } private User() { } }
10.使用字串模版簡化字串拼接
- Kotlin程式碼
val info = "name:$name,age:$age"
- Java程式碼
String info = "name:" + this.name + ",age:" + this.age;
11. 使用when進行分支判斷(替代Java中switch)
- Kotlin程式碼
var id = 1 when (id) { 1 -> print("x == 1") 2 -> print("x == 2") else -> { print("id 不是 1 ,也不是 2") } }
另外kotlin還支援將同一類的條件寫在一起,如2,3 -> print("x == 2或者3")
- Java程式碼
int x = 1; switch (x) { case 1: print("x==1"); break; case 2: print("x==2"); break; default: print("id 不是 1 ,也不是 2"); break; }
12. 解構物件(Destructuring Declarations )(Java無此高階玩法)
data class User(val username: String, val age: Int) fun main() { val user = User("Jerry", 18) val (username, age) = user println("username:$username,age:$age") }
安卓開發技術分享:https://www.jianshu.com/p/442339952f26
更多技術總結好文,請關注:「程式園中猿」
