假设我们正在使用AVKit
,并且我们在播放/暂停按钮中添加了target
以处理曲目的播放/暂停。使用三元运算符只是为了产生副作用,这通常是不好的做法吗?
// (AVPlayer definition omitted)
@objc fileprivate func handlePlayPause() {
(player.timeControlStatus == .playing) ? player.pause() : player.play()
}
我问这个问题的主要原因是因为副作用会改变程序的状态,而且我相信我可能听说过,在我的一年级课程中的某个时候,您应该谨慎处理副作用。
答案 0 :(得分:1)
对于这种逻辑,基于enum
,我会选择switch
或if/else
而不是三元,因为将来可能需要在其中放入更多代码那里。
例如
if player.timeControlStatus == .playing) {
player.pause()
// set a button
} else {
player.play()
// un set a button
}
现在您也可以在三进制中执行此操作,但是我担心它会使代码的可读性降低。
答案 1 :(得分:1)
就个人而言,我想根据条件将值设置为变量时使用它们。
例如,假设如果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)行。
三元运算符很棒,但并非总是需要它们。假设您只想执行一个功能或执行多个操作。不要使用三元组。