zoukankan      html  css  js  c++  java
  • 让你的代码量减少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开发的完整项目地址

  • 相关阅读:
    LeetCode c++-- 118.杨辉三角
    LeetCode c++ --896. 单调数列
    LeetCode c++--1551. 使数组中所有元素相等的最小操作数
    LeetCode c++:1550. 存在连续三个奇数的数组
    LeetCode c++--字符串转换整数 (atoi)
    c++ 顺序容器常用知识总结
    c++基础知识之容器一:顺序容器
    小菜鸡c++ LeetCode初级算法之一——数组(删除排序数组中的重复项)
    JVM
    BATCH、事务、CLOB、BLOB
  • 原文地址:https://www.cnblogs.com/muyuge/p/6333509.html
Copyright © 2011-2022 走看看