让你的代码量减小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开发的完整项目地址

相关文章
相关标签/搜索