我是初学者.这是代码
extension Double {
func abs1() -> Double {
return ( self > 0 ) ? self : -1.0 * self
}
var abs2 : Double {
return ( self > 0 ) ? self : -1.0 * self
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道,abs1()函数和abs2变量之间的区别是什么,它们如何工作以及哪个更好?
他们的工作方式是一样的.这确实是意图的信号.我个人会推荐这种情况下的功能,这有点违反直觉,所以我会解释一下.
第一条规则是"它有副作用吗?" 如果是这样,它应该是一个功能.
第二条规则是"是O(1)吗?" (这意味着"它需要一个常数,通常假设是短暂的,一段时间才能运行."换句话说,它是"便宜吗?")如果不是,它应该是一个功能.
但第三个更微妙的规则是"它是否合理地被认为是实例的"属性"?在这种情况下,我会争辩,不.这与实例完全不同.它是在实例上计算的东西,而不是实例的固有部分.用非计算属性替换它是相当荒谬的(你永远不会将"4"存储为"-4"的"abs"字段).所以我会把它变成一个功能.
请注意,在Swift 3中,abs是类型上的静态函数(例如,它Double.abs(4.0)不是(4.0).abs).这不会使你的问题无效,但鉴于这个具体案例,团队选择解决这个问题,我觉得这是一个更好的方法.
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |