Kotlin 如何避免重复的else分支?
我试图以一种更为Kotlin的方式重构这个方法,并用重复的代码删除许多if-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
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,它就永远不会去