对可选vs默认值-1感到困惑

我们正在开发一个Swift项目。那里有一个功能,

fun getSleepAmmount() -> Int {
    // calculate sleep time
    // return value when valid
    // else
    return -1
}

我的团队成员更喜欢上面的功能,其中呼叫者需要使用-1进行查询,这是我不满意的。我的建议是使用nil return(尽管调用者仍需要检查可空性)进行重新设计,例如

fun getSleepAmmount() -> Int? {
    // calculate sleep time
    // return value when valid
    // else
    return nil
}

但是我的同事们不想重新设计。哪个版本的功能更干净?为什么?

qianyining19900907 回答:对可选vs默认值-1感到困惑

很显然,nil更干净。因为-1毫无意义。这只是一个魔术字。这种情况很难得到支持,重构和处理。

,

第二是更好的选择

if let v = getSleepAmmount() {}

但是先有了

 let v =  getSleepAmmount() 
 if v > 0 {}

返回nil表示这不是有效的返回值,而-1可能意味着另一件事将被检查代码的新开发人员所误解

,

返回nil是一个更好的解决方案,而不是使用任何垃圾或默认值

返回任何默认值将来可能会与实际结果发生冲突。

此外,可能还有其他开发人员在处理相同的代码。因此,使用nil比使用-1有更好的解释。

,

如果调用方中只有在存在有效睡眠量的情况下才应运行的代码,则可选方法是更好,更清晰的方法。这正是guard letif let设计的目的:

guard let sleepAmount = getSleepAmount() { else return }

// do something with sleepAmount

更好的方法是在函数内部抛出错误:

func getSleepAmmount() throws -> Int {
    // calculate sleep time
    // return when valid
    // else
    throw InvalidSleepAmount
}

然后

do {
    let sleepAmount = try getSleepAmount()
    // do something with it
} catch InvalidSleepAmount {
    // error processing
}

(如果需要,您的函数可能会引发不同的错误,因此调用方会知道为什么睡眠量无效,SleepTooShortSleepTooLong,{{1} }等)

本文链接:https://www.f2er.com/3103646.html

大家都在问