[swift-evolution] In-line scope designators
Robert Bennett
rltbennett at icloud.com
Mon Jun 19 13:45:58 CDT 2017
+1 for member variables, -1 for member functions. Functions take up too much vertical space to make this convenient; you’d constantly be scrolling around to view or modify the access level of a function. Plus I tend to group functions by use — private functions go directly above the public function that calls them. But member declarations are often one or just a few lines, and additionally are often grouped by access level anyway (at least that’s how I do it) so this provides a compact way to group them.
> On Jun 17, 2017, at 5:48 PM, Ted F.A. van Gaalen via swift-evolution <swift-evolution at swift.org> wrote:
>
> (I am not sure if I should tag this subject with [pitch]? )
>
> Please don’t worry , I am not attempting to start a new
> and infinite thread about whether or not the way scope
> is handled in Swift is imho correct or not.
> Errhm well, apart from that “protected” is missing,
> but please let us not start again.. :o)
>
> No, it is more or less a convenience solution to
> prevent unnecessary wear and tear to the following keys
> on my keyboard: [ A,E, I, P, R, T, V]
>
> I prefer it, not to expose those class or struct members
> which should not be accessible outside the class or struct
>
> Currently, to prevent access to private Items,
> I have to type the word “private” too many times:
>
> class House
> {
> private var rooms = 5
> private var roofTiles = 11201
> private let paint = UIColor.Blue;
> private var yearTax: Money = “323,56"
> private let garageVolume = 60.0
>
> init(..) {.. }
>
> private func calculateTax() {...}
>
> public func roomsUnoccupied() -> Int {…}
>
> func roofData(……) {…}
>
> private func a{…}
> }
>
> To set the scope of a list of members I suggest the
> “in-line scope modifiers” (anyone with a better name for it?)
>
> For example if one has a source line containing the word
> “private:” then all the following member declarations will
> be “private” until another inline scope modifier is encountered
> with one “default scope” to escape from it. like in the following example”
>
> The compiler can detect that it is an inline scope modifier, because it ends with a colon
>
> “Normal” scope modifiers, that is the ones which precede the member’s name
> directly should imho not be allowed within such a scope block.
> unless they would override for that specific item, but that looks ugly.
>
> getter & setters and init should appear in default scope
> (or with no in-line scope modifiers)
>
> Inline scope modifiers can be specified as often as
> desired and in arbitrary sequence.
>
>
> class House
> {
> init(..) {.. }
> private: // <—— In-line scope modifier all following declarations are private here.
> var rooms = 5
> var roofTiles = 11201
> let paint = UIColor.Blue;
> var yearTax: Money = “323,56"
> func calculateTax() {…}
> func a{…}
>
> public: // <—— In-line scope modifier
> var garageVolume = 60.0
> func roomsUnoccupied() -> Int {…}
> func roofData(……) {…}
>
> defaultscope: // <—— Return to default scope (only needed when preceding inline scope modifiers are present. )
>
> func sellHouse(buyer: CustomerID)
> }
>
> See? looks a lot better, don’t you think so?
> it also makes sources more readable because one can
> now conveniently group items.
>
> 100% source compatible with whatever scope
> mechanism now or in the future is or will be deployed.
>
>
> (The idea is not exactly new, a similar construct is available in Object Pascal.)
>
> ?
>
> Kind Regards
> TedvG
>
>
>
>
>
>
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
More information about the swift-evolution
mailing list