使用三元运算符只是为了副作用——好还是坏?

Using ternary operator just for the side effect - Good or Bad?

假设我们正在使用 AVKit 并且我们在 play/pause 按钮中添加了一个 target 来处理 playing/pausing的轨道。仅仅为了副作用而使用三元运算符通常是不好的做法吗,如下所示?

// (AVPlayer definition omitted)

@objc fileprivate func handlePlayPause() {

    (player.timeControlStatus == .playing) ? player.pause() : player.play()

}

我问这个问题的主要原因是副作用会改变程序的状态,我相信我可能听说过在我第一年的课程中你应该小心处理副作用。

对于这种逻辑,基于 enum,我会选择 switch,或者 if/else 而不是三元,因为将来我可能需要放更多代码在里面

例如

if player.timeControlStatus == .playing) {
   player.pause() 
   // set a button 
} else {
   player.play()
   // un set a button 
}

现在您也可以在三进制中执行此操作,但我担心这会降低代码的可读性。

就个人而言,当我想根据条件为变量设置值时,我会使用它们。

例如,如果x == 42,我希望变量ytrue。如果 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) 行。

三元运算符很棒,但并不总是需要它们。假设你只想执行一个函数,或者做多个操作。不要使用三元组。

  1. 使用三元运算符为变量设置值,或在必要时减少代码。
  2. 对其他一切使用 if-else 语句。