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

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

本文同步自博主的私人博客wing的地方酒館php

上一節說到,kotlin能夠省去getter,setter,和findviewbyid,能夠看到已經能去除掉很多代碼了。本篇再帶給你們一篇祕笈,叫作函數擴展。java

函數擴展是什麼東東捏,通常來講,咱們擴展一個類,須要去繼承來實現,不過這樣又要寫N多代碼呀~~ 標題說了,kotlin能讓你的代碼量減小至少3倍!不信?快來跟我看看!android

來讓咱們先把佈局的TextView換爲一個Buttongit

<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代碼的話,你們都很輕車熟路了吧~~ github

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給他開一刀。ide

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

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

去掉findviewbyid

以前說過,直接寫id就能夠拿到控件拉~~因此findviewbyid這句話省去了。佈局

加入監聽器

咱們能夠直接用lambda的哈,因此呢,能夠寫成這樣ui

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開發的完整項目地址

相關文章
相關標籤/搜索