仅出于副作用而使用三元运算符-好还是不好?

时间:2019-03-26 03:16:04

标签: ios swift ternary-operator imperative-programming

假设我们正在使用AVKit,并且我们在播放/暂停按钮中添加了target以处理曲目的播放/暂停。使用三元运算符只是为了产生副作用,这通常是不好的做法吗?

// (AVPlayer definition omitted)

@objc fileprivate func handlePlayPause() {

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

}

我问这个问题的主要原因是因为副作用会改变程序的状态,而且我相信我可能听说过,在我的一年级课程中的某个时候,您应该谨慎处理副作用。

2 个答案:

答案 0 :(得分:1)

对于这种逻辑,基于enum,我会选择switchif/else而不是三元,因为将来可能需要在其中放入更多代码那里。

例如

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

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

答案 1 :(得分:1)

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

例如,假设如果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语句用于其他所有内容。