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

问题描述 投票:-1回答:2

假设我们正在使用AVKit,我们在播放/暂停按钮中添加了target来处理播放/暂停音轨。使用三元运算符只是因为它的副作用一般是不好的做法,例如下面的?

// (AVPlayer definition omitted)

@objc fileprivate func handlePlayPause() {

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

}

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

ios swift ternary-operator imperative-programming
2个回答
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语句。

1
投票

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

例如

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

现在你也可以在三元组中做到这一点,但我担心它会使代码的可读性降低。

© www.soinside.com 2019 - 2024. All rights reserved.