让你的代码量减少3倍!使用kotlin开发Android(二) --秘笈!扩展函数

原创 2016年10月13日 23:12:10

本文承接上一篇文章:让你的代码量减少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开发的完整项目地址

版权声明:本文为博主原创文章,欢迎注明出处后转载。

让你的代码量减少3倍!使用kotlin开发Android(一) 创建Kotlin工程

让你的代码量减少3倍!使用kotlin开发Android(一) 创建Kotlin工程本文同步自博主的私人博客:wing的地方酒馆写在前面使用kotlin开发android已经两周多了。得到的好处太多,...
  • m0_37314675
  • m0_37314675
  • 2017年09月06日 15:36
  • 75

让你的代码量减少3倍!使用kotlin开发Android(一)

写在前面 使用kotlin开发android已经两周多了。得到的好处太多,敲代码简直是爽的飞起。kotlin简单,易用,代码量少。这么爽的东西,不敢私藏,所以写出来与大家分享。 可能标题说减少3倍...
  • wingichoy
  • wingichoy
  • 2016年10月08日 10:03
  • 6743

kotlin随笔—扩展函数

扩展函数
  • jhj_24
  • jhj_24
  • 2017年01月09日 17:04
  • 3241

Kotlin-12.扩展函数和属性(extensions)

Kotlin支持扩展函数和扩展属性(extensions),kotlin使用扩展(动机)原因;扩展静态解析,不是虚函数(即没有多态);调用只取决于对象声明类型决定,而不是由对象实际类型决定;可空接收者...
  • qq_32115439
  • qq_32115439
  • 2017年06月21日 23:02
  • 1092

让你的代码量减少3倍!使用kotlin开发Android(四) kotlin bean背后的秘密

上一篇我们介绍了缩短五倍的java bean,不知道你在看的时候有没有一种疑问捏?本文同步自博主的私人博客wing的地方酒馆再来回顾一下...
  • wingichoy
  • wingichoy
  • 2016年11月01日 18:28
  • 3288

kotlin-for-android简介 (让你的Android代码更简洁)

Kotlin是众多基于JVM的语言之一,它一开始是作为android 开发中java语言的可能的代替者出现的。java是世界上使用最多的语言之一,而伴随着其他语言的发展使得程序员编程越来越容易,...
  • bboyfeiyu
  • bboyfeiyu
  • 2015年03月26日 18:15
  • 4270

Kotlin-扩展

概述在Kotlin中,允许对类进行扩展,不需要继承或使用 Decorator 模式,通过一种特殊形式的声明,来实现具体实现某一具体功能。扩展函数是静态解析的,并未对原类增添函数或者属性,也就是说对其本...
  • IO_Field
  • IO_Field
  • 2016年11月22日 20:11
  • 2649

android kotlin扩展函数

Kotlin的扩展函数功能使得我们可以为现有的类添加新的函数,而不用修改原来的类。这可以帮助我们简化代码而且让封闭的类打破局限.这些函数通常会替代工具类。示例:fun intMult(num: Int...
  • u010296640
  • u010296640
  • 2017年06月07日 11:00
  • 271

kotlin的扩展函数和扩展属性

扩展函数与扩展属性的神奇之处在于,可以在不修改原来类的条件下,使用函数和属性,表现得就像是属于这个类的一样。下面我们先看使用效果1.扩展属性第一个红矩形框中,你会发现TextView什么时候有left...
  • u012762986
  • u012762986
  • 2017年06月01日 17:38
  • 1727

Kotlin 扩展函数详解与应用

一、什么是扩展函数?扩展函数数是指在一个类上增加一种新的行为,甚至我们没有这个类代码的访问权限。这是一个在缺少有用函数的类上扩展的方法,Kotlin能够为我们做到那些令人关注的事情,而这些Java做不...
  • ComWill
  • ComWill
  • 2017年08月16日 07:32
  • 813
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:让你的代码量减少3倍!使用kotlin开发Android(二) --秘笈!扩展函数
举报原因:
原因补充:

(最多只允许输入30个字)