[swift-evolution] Proposal: Auto-implemented computed properties

Nathan Yee ny.nathan.yee at gmail.com
Fri Dec 11 13:20:43 CST 2015


Certain languages allow the programmer to avoid creating backing variables
for getters and setters by using this syntax:

class Foo {
    init(x: Double) {
        self.x = x
    }
    var x: Double {
        get
        set
    }
    // alternatively var x: Double { get; set }
}

and generating code equivalent to this:

class Foo {
    init(x: Double) {
        _x = x
    }
    var _x: Double
    var x: Double {
        get {
            return _x
        }
        set {
            _x = newValue
        }
    }
}

This notation decreases verbosity and reduces the chance of incorrectly
implementing the pattern.

In the following case, the computed property 'x' can only be set in the
initializer.

class Foo {
    init(x: Double) {
        self.x = x
    }
    var x: Double { get }
}

Alternatively, the following syntax can be used to avoid using an
initializer:

class Foo {
    var x: Double { get } = 1.0
}

Before looking into the nuances of this syntax (regarding struct/enum
properties, access control, attributes, etc.) I would like to ask the
community if this feature would be a good fit for Swift.

-- 
Nathan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151211/6be25953/attachment.html>


More information about the swift-evolution mailing list