Android Kotlin初識

一. Kotlin簡介

  2017 年,谷歌宣佈在其 Android Studio IDE 中支持 Kotlin,Kotlin 開始成爲 Android 開發的一級語言,當時業界並不太看好,因爲 Java 在安卓的發展過程中做出了巨大的貢獻,其作爲安卓開發語言的觀念已經根深蒂固,而且它也一直在不斷完善。
然而僅僅幾年時間,Kotlin 因其相比 Java 更安全與簡潔等優越性,很快佔領市場,谷歌 Android 首席佈道師 Chet Haase 表示:“在過去的兩年中,Kotlin 受歡迎程度一直在提高,超過 50% 的專業 Android 開發人員現在使用 Kotlin 開發他們的應用”。從今年 Stack Overflow 年度開發者調查的數據中也能看到這一點,如下圖所示,報告中指出,在開發者最喜愛的編程語言中,Kotlin 得到了 72.6% 正面反饋。

1.1. Java的輝煌與陰影

  1995年,當年如日中天的Sun公司發佈了Java語言,引起了巨大的轟動,與當時主流的C語言和Basic語言比起來,Java語言簡單、面向對象、穩定、與平臺無關、解釋型、多線程、動態等特點,就像是打開了一個新的世界,一時間風靡全球,雲集者衆,微軟爲了模仿Java搞出C#語言,Netscape爲了趕時髦硬塞出一個JavaScript語言,IBM則捏着鼻子做了Java IDE Eclipse(日蝕,呵呵)。直到現在,Java在編程世界裏還佔據着舉足輕重的地位,Andy Rubin在開發Android系統時,也很自然地採用了Java和C++(C++負責NDK開發)作爲開發語言。
  但是,Java畢竟是20多年前的語言了,雖然有不斷擴展更新,但是底層設計思想是很難改動的,這就導致它很難實現一些新的語言特性,例如函數式編程、Lambda 表達式、流式API、高階函數、空指針安全等(雖然Java8實現了部分特性,但是Android還不怎麼支持Java8),這些新的語言特性大受好評,可以說解放了編程的生產力,這其實也說明了一個事實:開發效率/時間是軟件公司真正的瓶頸,任何能壓縮代碼量,提高開發效率的舉措,都應該受到重視。
  而且,Android還存在Java版權危機的問題,收購了Sun公司的Oracle曾向Google索要鉅額的Java版權費,這可能也加快了Google尋找Android開發替代語言的動作。
  蘋果公司已經在用Swift語言替代Object-C語言,Google也找到了替代Java的語言,也就是JetBrains公司(Android Studio也是用該公司的Intelli J改的)主推的Kotlin。
  其實,Swift和Kotlin還挺相似的,有一篇Swift is like Kotlin對這兩種語言做過簡單的對比。

1.2. Kotlin的出現

  Kotlin也是基於JVM設計的編程語言,算是對Java的溫和改良,她是一個開源項目的成果,擁有很高的聲望,很多公司、組織、業界大犇都很喜歡她,Square公司的Jake大神(Dagger、ButterKnife、Retrofit、OkHttp…之父)就專門寫了篇Using Project Kotlin for Android爲Kotlin站臺。
相對Java來說,Kotlin在編寫代碼時有如下優勢:代碼簡潔高效、函數式編程、空指針安全、支持lambda表達式、流式API等。
  在執行效率上,Kotlin和Java具有同樣的理論速度(都是編譯成JVM字節碼)。
  另外,新語言必須考慮兼容性,爲了與存量項目代碼和諧共處,Kotlin和Java是互相完美兼容的,兩種代碼文件可以並存,代碼可以互相調用、文件可以互相轉換,庫文件也可以無障礙地互相調用,據說使用Kotlin基本不會帶來額外的成本負擔。

二. Kotlin佈局

  Kotlin作爲Java的改良,在Android開發中有很多優勢,我們先從相對直觀的界面繪製開始瞭解,然後看看Kotlin的語法特點,再慢慢去接觸更深層次的編程思想。

2.1. 簡化findViewById

  我們知道,Android的架構裏,xml佈局文件和Activity是松耦合的,Activity中要使用界面元素,必須藉助R文件對xml控件的記錄,用findViewById找到這個元素。
在Kotlin中我們可繼續使用findViewById去綁定xml佈局中的控件:(TextView)findViewById(R.id.hello);Kotlin提供一種更激進的方法,徹底取消findViewById這個函數,直接使用控件Id,其他用法和java使用一樣。

2.1.1.佈局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
<TextView
        android:id="@+id/tv_main_txt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:text="Hello World!"
        android:textSize="18sp" />
    <ImageView
        android:id="@+id/iv_main_img"
        android:layout_width="45dp"
        android:layout_height="45dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:scaleType="fitCenter" />
</LinearLayout>

2.1.2.邏輯代碼

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        tv_main_txt.setText("kotlin文檔")
        tv_main_txt.setTextColor(
            ContextCompat.getColor(this, R.color.blue)
        )
        iv_main_img.setImageResource(R.drawable.icon_img)
    }
}

2.1.3.效果圖

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章