讓你的程式碼量減少3倍!使用kotlin開發Android(二) --祕笈!擴充套件函式

androidwing發表於2016-10-08

本文承接上一篇文章:讓你的程式碼量減少3倍!使用kotlin開發Android(一) 建立Kotlin工程

本文同步自博主的私人部落格wing的地方酒館

上一節說到,kotlin可以省去getter,setter,和findviewbyid,可以看到已經能去除掉不少程式碼了。本篇再帶給大家一篇祕笈,叫做函式擴充套件。

函式擴充套件是什麼東東捏,一般來說,我們擴充套件一個類,需要去繼承來實現,不過這樣又要寫N多程式碼呀~~ 標題說了,kotlin能讓你的程式碼量減少至少3倍!不信?快來跟我看看!

來讓我們先把佈局的TextView換為一個Button

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.wingsofts.kotlindemo.MainActivity"
>

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
/>
</RelativeLayout>複製程式碼

假設我們實現這樣一個效果,在MainActivity裡,點選按鈕,彈出Toast。
Java程式碼的話,大家都很輕車熟路了吧~~

Button button = findviewbyid(R.id.button)
button.setOnClickListener(new View.OnClickListener() {
      @Override public void onClick(View v) {
        Toast.makeText(this,"hello java",Toast.LENGTH_SHORT);
      }
    });複製程式碼

是不是一大坨!!!雖然AS能生成程式碼,可是還是很臃腫啊。什麼?你沒覺得臃腫?那你看著我用kotlin給他開一刀。

    button.setOnClickListener {toast("hello kotlin")}複製程式碼

鏘鏘鏘~你沒看錯。上面一大坨變成了這一句話。這是如何實現的呢。快來跟我一步一步動手簡化吧!

去掉findviewbyid

之前說過,直接寫id就可以拿到控制元件拉~~所以findviewbyid這句話省去了。

加入監聽器

我們可以直接用lambda的哈,所以呢,可以寫成這樣

    button.setOnClickListener {
      v:View -> Toast.makeText(this,"hello lambda",Toast.LENGTH_SHORT).show()
    }複製程式碼

lambda不熟悉的話,快去谷歌一下用法哈~ 接下來呢,如果lambda左值引數沒有用到的話,是可以省略的,所以現在寫成了


    button.setOnClickListener {

     Toast.makeText(this,"hello lambda",Toast.LENGTH_SHORT).show()

    }複製程式碼

呃。。看起來還是有點多,是不?別急,祕籍來了!

函式擴充套件

函式擴充套件可以讓你對任意類進行擴充套件,而不用繼承等等複雜的操作。
舉個例子!拿Toast來說,到處都可以用到,我們新建個kt檔案,叫做ext
裡面寫上如下程式碼:

fun Context.toast(message:String,length : Int = Toast.LENGTH_SHORT){
  Toast.makeText(this,message,length)
}複製程式碼

對!沒錯,加了這句話,就可以在所有Context型別中使用toast這個函式了。

具體的語法是 fun + 型別.函式(引數)

這斷程式碼可以寫在任意可以編譯到的檔案中,直的注意的是,如果寫在了class內部,則是區域性生效。

來看一下第二個引數,可以給預設值,如果引數不傳,則自動呼叫預設值,這方便了什麼?大家想想,沒錯!! 就是過載!!! 總之最終簡化版點選按鈕相應彈toast,程式碼就是一行!

    button.setOnClickListener {toast("hello kotlin")}複製程式碼

簡直不能cool更多,你們覺得呢?

本文這就結束了(嫌文字太短?不要急啦,先去動手實踐下咯。。系列文章,既然挖了坑,就不會拖更的(吧..))

本專案使用的程式碼地址

歡迎加入Kotlin小樂園群:479109923

如果你是Android開發者,那麼你還可以來 wing的酒館:425983695
來分享你的開發經驗哦

一個使用Kotlin開發的完整專案地址

相關文章