本文承接上一篇文章:讓你的程式碼量減少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
來分享你的開發經驗哦