讓你的代碼量減少3倍!使用kotlin開發Android(二) --祕笈!擴展函數

本文承接上一篇文章:讓你的代碼量減少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更多,你們覺得呢?

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

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

一個使用Kotlin開發的完整項目地址

發佈了113 篇原創文章 · 獲贊 589 · 訪問量 53萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章