Kotlin 如何避免重复的else分支?

Kotlin 如何避免重复的else分支?,kotlin,Kotlin,我试图以一种更为Kotlin的方式重构这个方法,并用重复的代码删除许多if-else。我似乎找不到工作的方法 fun update(type: Update) { if (model.list.isNotEmpty()) { fun List<UserList>.filter(listType: ListType): UserList? = this.firstOrNull { userList -> userList.listType == listTyp

我试图以一种更为Kotlin的方式重构这个方法,并用重复的代码删除许多if-else。我似乎找不到工作的方法

fun update(type: Update) {
    if (model.list.isNotEmpty()) {
      fun List<UserList>.filter(listType: ListType): UserList? = this.firstOrNull { userList -> userList.listType == listType }

      val userList = type.list.filter(getTabSelectedListType())

      if (userList != null) {
        val listToShow = userList.toShoppingWrapper(model.cart)

        adapterShopping.update(listToShow, type.updateCurrentList)
        if (listToShow.isNotEmpty()) with(binding) {
          recyclerView.visible()
          emptyLayoutMyProducts.emptyView.gone()
          emptyLayoutFavorites.emptyView.gone()
          emptyLayoutLists.emptyView.gone()
        } else when (binding.tabLayout.getTabAt(binding.tabLayout.selectedTabPosition)?.tag) {
            PRODUCTS -> showMyProductsEmptyLayout()
            FAVORITES -> showFavoritesEmptyLayout()
        }
      } else when (binding.tabLayout.getTabAt(binding.tabLayout.selectedTabPosition)?.tag) {
        PRODUCTS -> showMyProductsEmptyLayout()
        FAVORITES -> showFavoritesEmptyLayout()
      }
    } else when (binding.tabLayout.getTabAt(binding.tabLayout.selectedTabPosition)?.tag) {
      PRODUCTS -> showMyProductsEmptyLayout()
      FAVORITES -> showFavoritesEmptyLayout()
    }
  }
fun更新(类型:更新){
if(model.list.isNotEmpty()){
有趣的列表.过滤器(listType:listType):UserList?=this.firstOrNull{UserList->UserList.listType==listType}
val userList=type.list.filter(getTabSelectedListType())
if(userList!=null){
val listToShow=userList.toShoppingWrapper(model.cart)
AdapterShipping.update(listToShow,type.updateCurrentList)
if(listToShow.isNotEmpty())与(binding){
recyclerView.visible()
emptyLayoutMyProducts.emptyView.gone()
emptyLayoutFavorites.emptyView.gone()
emptyLayoutLists.emptyView.gone()
}else when(binding.tabLayout.getTabAt(binding.tabLayout.selectedTabPosition)?.tag){
产品->showMyProductsEmptyLayout()
收藏夹->showFavoritesEmptyLayout()
}
}else when(binding.tabLayout.getTabAt(binding.tabLayout.selectedTabPosition)?.tag){
产品->showMyProductsEmptyLayout()
收藏夹->showFavoritesEmptyLayout()
}
}else when(binding.tabLayout.getTabAt(binding.tabLayout.selectedTabPosition)?.tag){
产品->showMyProductsEmptyLayout()
收藏夹->showFavoritesEmptyLayout()
}
}

这应该可以做到

    var userList = null
    var listToShow = emptyList<Specify type here>()
    if (model.list.isNotEmpty()) {
        fun List<UserList>.filter(listType: ListType): UserList? = this.firstOrNull { userList -> userList.listType == listType }

        userList = type.list.filter(getTabSelectedListType())

        if (userList != null) {
             listToShow = userList.toShoppingWrapper(model.cart)

            adapterShopping.update(listToShow, type.updateCurrentList)
            if (listToShow.isNotEmpty()) with(binding) {
                recyclerView.visible()
                emptyLayoutMyProducts.emptyView.gone()
                emptyLayoutFavorites.emptyView.gone()
                emptyLayoutLists.emptyView.gone()
            } 
        } 
    } 
    if(model.list.isEmpty()||userList == null ||listToShow==null|| listToShow.isEmpty() ){
        when (binding.tabLayout.getTabAt(binding.tabLayout.selectedTabPosition)?.tag) {
            PRODUCTS -> showMyProductsEmptyLayout()
            FAVORITES -> showFavoritesEmptyLayout()
        }
    }
var userList=null
var listToShow=emptyList()
if(model.list.isNotEmpty()){
有趣的列表.过滤器(listType:listType):UserList?=this.firstOrNull{UserList->UserList.listType==listType}
userList=type.list.filter(getTabSelectedListType())
if(userList!=null){
listToShow=userList.toShoppingWrapper(model.cart)
AdapterShipping.update(listToShow,type.updateCurrentList)
if(listToShow.isNotEmpty())与(binding){
recyclerView.visible()
emptyLayoutMyProducts.emptyView.gone()
emptyLayoutFavorites.emptyView.gone()
emptyLayoutLists.emptyView.gone()
} 
} 
} 
if(model.list.isEmpty()| | userList==null | | listToShow==null | | listToShow.isEmpty()){
何时(binding.tabLayout.getTabAt(binding.tabLayout.selectedTabPosition)?.tag){
产品->showMyProductsEmptyLayout()
收藏夹->showFavoritesEmptyLayout()
}
}

这应该可以做到

    var userList = null
    var listToShow = emptyList<Specify type here>()
    if (model.list.isNotEmpty()) {
        fun List<UserList>.filter(listType: ListType): UserList? = this.firstOrNull { userList -> userList.listType == listType }

        userList = type.list.filter(getTabSelectedListType())

        if (userList != null) {
             listToShow = userList.toShoppingWrapper(model.cart)

            adapterShopping.update(listToShow, type.updateCurrentList)
            if (listToShow.isNotEmpty()) with(binding) {
                recyclerView.visible()
                emptyLayoutMyProducts.emptyView.gone()
                emptyLayoutFavorites.emptyView.gone()
                emptyLayoutLists.emptyView.gone()
            } 
        } 
    } 
    if(model.list.isEmpty()||userList == null ||listToShow==null|| listToShow.isEmpty() ){
        when (binding.tabLayout.getTabAt(binding.tabLayout.selectedTabPosition)?.tag) {
            PRODUCTS -> showMyProductsEmptyLayout()
            FAVORITES -> showFavoritesEmptyLayout()
        }
    }
var userList=null
var listToShow=emptyList()
if(model.list.isNotEmpty()){
有趣的列表.过滤器(listType:listType):UserList?=this.firstOrNull{UserList->UserList.listType==listType}
userList=type.list.filter(getTabSelectedListType())
if(userList!=null){
listToShow=userList.toShoppingWrapper(model.cart)
AdapterShipping.update(listToShow,type.updateCurrentList)
if(listToShow.isNotEmpty())与(binding){
recyclerView.visible()
emptyLayoutMyProducts.emptyView.gone()
emptyLayoutFavorites.emptyView.gone()
emptyLayoutLists.emptyView.gone()
} 
} 
} 
if(model.list.isEmpty()| | userList==null | | listToShow==null | | listToShow.isEmpty()){
何时(binding.tabLayout.getTabAt(binding.tabLayout.selectedTabPosition)?.tag){
产品->showMyProductsEmptyLayout()
收藏夹->showFavoritesEmptyLayout()
}
}

使用nullability来完成成功操作的顺序。末尾的null或空值将转到同一else分支

fun update(type: Update) {
    fun List<UserList>.filter(listType: ListType): UserList? = this.firstOrNull { userList -> userList.listType == listType }

    val userList = if (model.list.isEmpty()) null else type.list.filter(getTabSelectedListType())
    val listToShow = userList?.toShoppingWrapper(model.cart)?.also {
        adapterShopping.update(it, type.updateCurrentList)
    }
    if (!listToShow.isNullOrEmpty()) {
        with(binding) {
          recyclerView.visible()
          emptyLayoutMyProducts.emptyView.gone()
          emptyLayoutFavorites.emptyView.gone()
          emptyLayoutLists.emptyView.gone()
        }
    } else when (binding.tabLayout.getTabAt(binding.tabLayout.selectedTabPosition)?.tag) {
        PRODUCTS -> showMyProductsEmptyLayout()
        FAVORITES -> showFavoritesEmptyLayout()
    }
}
fun更新(类型:更新){
有趣的列表.过滤器(listType:listType):UserList?=this.firstOrNull{UserList->UserList.listType==listType}
val userList=if(model.list.isEmpty())null else type.list.filter(getTabSelectedListType())
val listToShow=userList?.toShoppingWrapper(model.cart){
adapterShopping.update(it,type.updateCurrentList)
}
如果(!listToShow.isNullOrEmpty()){
有(约束力){
recyclerView.visible()
emptyLayoutMyProducts.emptyView.gone()
emptyLayoutFavorites.emptyView.gone()
emptyLayoutLists.emptyView.gone()
}
}else when(binding.tabLayout.getTabAt(binding.tabLayout.selectedTabPosition)?.tag){
产品->showMyProductsEmptyLayout()
收藏夹->showFavoritesEmptyLayout()
}
}

使用nullability来完成成功操作的顺序。末尾的null或空值将转到同一else分支

fun update(type: Update) {
    fun List<UserList>.filter(listType: ListType): UserList? = this.firstOrNull { userList -> userList.listType == listType }

    val userList = if (model.list.isEmpty()) null else type.list.filter(getTabSelectedListType())
    val listToShow = userList?.toShoppingWrapper(model.cart)?.also {
        adapterShopping.update(it, type.updateCurrentList)
    }
    if (!listToShow.isNullOrEmpty()) {
        with(binding) {
          recyclerView.visible()
          emptyLayoutMyProducts.emptyView.gone()
          emptyLayoutFavorites.emptyView.gone()
          emptyLayoutLists.emptyView.gone()
        }
    } else when (binding.tabLayout.getTabAt(binding.tabLayout.selectedTabPosition)?.tag) {
        PRODUCTS -> showMyProductsEmptyLayout()
        FAVORITES -> showFavoritesEmptyLayout()
    }
}
fun更新(类型:更新){
有趣的列表.过滤器(listType:listType):UserList?=this.firstOrNull{UserList->UserList.listType==listType}
val userList=if(model.list.isEmpty())null else type.list.filter(getTabSelectedListType())
val listToShow=userList?.toShoppingWrapper(model.cart){
adapterShopping.update(it,type.updateCurrentList)
}
如果(!listToShow.isNullOrEmpty()){
有(约束力){
recyclerView.visible()
emptyLayoutMyProducts.emptyView.gone()
emptyLayoutFavorites.emptyView.gone()
emptyLayoutLists.emptyView.gone()
}
}else when(binding.tabLayout.getTabAt(binding.tabLayout.selectedTabPosition)?.tag){
产品->showMyProductsEmptyLayout()
收藏夹->showFavoritesEmptyLayout()
}
}

你不能把所有的
其他的
代码都放在一个里面,因为它们是一样的,总是被执行。它们是一样的,但不总是被执行。如果我把一个放在外面,如果userList为空,它就不会转到else分支。谢谢澄清。你可以把所有的
else
代码放在一个里面,因为它们是一样的,总是被执行。它们是一样的,但不总是被执行。如果我把这个放在外面,如果userList为null,它就永远不会去