如何在变量上运行链而不是 if else?
How to function chain instead of if else on a variable?
你好我想知道是否有更好的方法来使用作用域函数而不是 if else 来编写这行代码。我想根据我的 addToStack
变量
链接 .addTOBackStack()
函数
if(addToStack){
supportFragmentManager
.beginTransaction()
.replace(R.id.fragment_container, feedViewFragment)
.addToBackStack(null)
.commit()
}else{
supportFragmentManager
.beginTransaction()
.replace(R.id.fragment_container, feedViewFragment)
.commit()
}
除非您的 addToBackStack
有某种检查机制(它有效地将您的 if else loop
逻辑转移到您的 addToBackStack
代码中,否则您无法真正逃脱 if else 循环15=]
如果您想要更短、更易读的代码,这是一种方法:
sfm = supportFragmentManager
.beginTransaction()
.replace(R.id.fragment_container, feedViewFragment)
sfm = addToStack ? sfm.addToBackStack(null) : sfm
sfm.commit()
或使用三进制到最大值:
sfm = supportFragmentManager
.beginTransaction()
.replace(R.id.fragment_container, feedViewFragment)
addToStack ? sfm.addToBackStack(null).commit() : sfm.commit()
您可以使用 let()
范围函数链接它:
supportFragmentManager
.beginTransaction()
.replace(R.id.fragment_container, feedViewFragment)
.let{ if (addToStack) it.addToBackStack(null) else it }
.commit()
它有点笨拙(由于需要 return it
不做任何其他处理),但它适合任何链。
如果 addToBackStack()
只是 return 调用它的对象(即它是一个 ‘fluent’ interface), then it could be a little simpler with also()
:
supportFragmentManager
.beginTransaction()
.replace(R.id.fragment_container, feedViewFragment)
.also{ if (addToStack) it.addToBackStack(null) }
.commit()
当然,如果处理变得庞大和复杂,这就有可能使代码难以阅读 — 因此也值得考虑用临时变量拆分链(根据另一个答案)。
你好我想知道是否有更好的方法来使用作用域函数而不是 if else 来编写这行代码。我想根据我的 addToStack
变量
.addTOBackStack()
函数
if(addToStack){
supportFragmentManager
.beginTransaction()
.replace(R.id.fragment_container, feedViewFragment)
.addToBackStack(null)
.commit()
}else{
supportFragmentManager
.beginTransaction()
.replace(R.id.fragment_container, feedViewFragment)
.commit()
}
除非您的 addToBackStack
有某种检查机制(它有效地将您的 if else loop
逻辑转移到您的 addToBackStack
代码中,否则您无法真正逃脱 if else 循环15=]
如果您想要更短、更易读的代码,这是一种方法:
sfm = supportFragmentManager
.beginTransaction()
.replace(R.id.fragment_container, feedViewFragment)
sfm = addToStack ? sfm.addToBackStack(null) : sfm
sfm.commit()
或使用三进制到最大值:
sfm = supportFragmentManager
.beginTransaction()
.replace(R.id.fragment_container, feedViewFragment)
addToStack ? sfm.addToBackStack(null).commit() : sfm.commit()
您可以使用 let()
范围函数链接它:
supportFragmentManager
.beginTransaction()
.replace(R.id.fragment_container, feedViewFragment)
.let{ if (addToStack) it.addToBackStack(null) else it }
.commit()
它有点笨拙(由于需要 return it
不做任何其他处理),但它适合任何链。
如果 addToBackStack()
只是 return 调用它的对象(即它是一个 ‘fluent’ interface), then it could be a little simpler with also()
:
supportFragmentManager
.beginTransaction()
.replace(R.id.fragment_container, feedViewFragment)
.also{ if (addToStack) it.addToBackStack(null) }
.commit()
当然,如果处理变得庞大和复杂,这就有可能使代码难以阅读 — 因此也值得考虑用临时变量拆分链(根据另一个答案)。