假设我们正在使用AVKit
,我们在播放/暂停按钮中添加了target
来处理播放/暂停音轨。使用三元运算符只是因为它的副作用一般是不好的做法,例如下面的?
// (AVPlayer definition omitted)
@objc fileprivate func handlePlayPause() {
(player.timeControlStatus == .playing) ? player.pause() : player.play()
}
我问这个的主要原因是因为副作用会改变程序的状态,我相信我可能听说过你应该在我的第一年课程中仔细处理副作用。
就个人而言,当我想根据条件将值设置为变量时,我会使用它们。
例如,让我们说如果x == 42
,我希望变量y
是true
。如果x
不等于42,那么变量y
的值是false
。
那么,我该怎么写呢?像这样…
let y = (x == 42) ? true : false
对于if-else
,我会争辩并反对它。
为什么?看看这段代码:
var y = false
if (x == 42) {
y = true
}
所以我们可以有这样的东西,假设你希望它在一行:
var y = false if (x == 42) { y = true }
这是丑陋和不必要的,因为我们可以像这样写:
let y = (x == 42) ? true : false
太干净了!我们将七(4)行代码减少到只有一(1)行。
三元运算符很棒,但并不总是需要它们。假设您只想执行一个函数,或者执行多个操作。不要使用三元。
对于这种逻辑,基于enum
,我会选择switch
,或if/else
而不是三元,因为将来,我可能需要在那里放更多的代码。
例如
if player.timeControlStatus == .playing) {
player.pause()
// set a button
} else {
player.play()
// un set a button
}
现在你也可以在三元组中做到这一点,但我担心它会使代码的可读性降低。