kotlin

Kotlin学习手册(八)内联函数let、with、run、ap

2019-11-04  本文已影响0人  Geekholt

如需转载请评论或简信,并注明出处,未经允许不得转载

Kotlin系列导读

Kotlin学习手册(一)类与继承
Kotlin学习手册(二)属性与字段
Kotlin学习手册(三)接口
Kotlin学习手册(四)内部类
Kotlin学习手册(五)函数
Kotlin学习手册(六)数组与集合
Kotlin学习手册(七)for循环
Kotlin学习手册(八)内联函数let、with、run、apply、also
Kotlin学习手册(九)空类型安全
Kotlin学习手册(十)带你真正理解什么是Kotlin协程

目录

let

函数结构

object.let{
   //在函数体内使用it替代object对象去访问其公有的属性和方法
   it.todo()
   ...
}

//另一种用途 判断object为null的操作
//表示object不为null的条件下,才会去执行let函数体
object?.let{
   it.todo()
}

适用的场景

例子

mTextView?.textSize(...)
mTextView?.setTextColor(...)
mTextView?.background(..)
mTextView?.let{
        it..textSize(...)
        it.setTextColor(...)
        it.background(..)
}

特点

with

函数结构

 with(object){
   //todo
 }

适用的场景

例子

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
         itemView.shop_tv_edit.setOnClickListener(listener)
         itemView.shop_tv_insert.setOnClickListener(listener)
         itemView.shop_tv_show.setOnClickListener(listener)
         itemView.shop_tv_hide.setOnClickListener(listener)
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
        with(itemView) {
            shop_tv_edit.setOnClickListener(listener)
            shop_tv_insert.setOnClickListener(listener)
            shop_tv_show.setOnClickListener(listener)
            shop_tv_hide.setOnClickListener(listener)
        }
}

特点

run

函数结构

object.run{
//todo
}

适用的场景

例子

override fun onBindViewHolder(holder: ViewHolder, position: Int){
   val item = getItem(position)?: return
   
   with(item){
     holder.tvNewsTitle.text = StringUtils.trimToEmpty(titleEn)
       holder.tvNewsSummary.text = StringUtils.trimToEmpty(summary)
       holder.tvExtraInf = "难度:$gradeInfo | 单词数:$length | 读后感: $numReviews" 
   
   }
}
override fun onBindViewHolder(holder: ViewHolder, position: Int){
   
  getItem(position)?.run{
      holder.tvNewsTitle.text = StringUtils.trimToEmpty(titleEn)
       holder.tvNewsSummary.text = StringUtils.trimToEmpty(summary)
       holder.tvExtraInf = "难度:$gradeInfo | 单词数:$length | 读后感: $numReviews"
   }
}

特点

run函数是letwith两个函数结合体,适用于letwith函数任何场景。准确来说它弥补了let函数在函数体内必须使用it参数替代对象,在run函数中可以像with函数一样可以省略,直接访问实例的公有属性和方法,另一方面它弥补了with函数传入对象判空问题,在run函数中可以像let函数一样做判空处理

apply

函数结构

object.apply{
//todo
}

适用的场景

例子

val wgDialog = WGDialog(this@ShopStuffActivity)
    wgDialog.message = "该页面尚未保存,是否返回?"
    wgDialog.btnLeft = "取消"
    wgDialog.btnRight = "确定"
    wgDialog.addListener(WGDialog.Item.RIGHT, object:   WGDialogInterface.OnClickListener{
          override fun onButtonClick(which: Int, isCheck: Boolean) {
               finish()
          }
    })
    wgDialog.show()
WGDialog(this@ShopStuffActivity).apply {
   message = "该页面尚未保存,是否返回?"
   btnLeft = "取消"
   btnRight = "确定"
   addListener(WGDialog.Item.RIGHT, object: WGDialogInterface.OnClickListener{
          override fun onButtonClick(which: Int, isCheck: Boolean) {
                  finish()
          }
     })
  }.show()

特点

also

函数结构

object.also{
//todo
}

适用的场景

例子

mTextView?.textSize(...)
mTextView?.setTextColor(...)
mTextView?.background(..)
mTextView?.also{
        it..textSize(...)
        it.setTextColor(...)
        it.background(..)
}

特点

比较

函数名 函数体内使用的对象 返回值
let it 函数块的最后一行或指定return表达式
with this或省略 函数块的最后一行或指定return表达式
run this或省略 函数块的最后一行或指定return表达式
apply this或省略 this
also it this
上一篇 下一篇

猜你喜欢

热点阅读