What does this do that breaking a structure down into local extensions with the 
appropriate level of access control doesn't?

~Robert Widmann

2016/06/13 0:55、Raphaël Wach via swift-evolution <swift-evolution@swift.org> 
のメッセージ:

> Hello Swifters,
> 
> While working on some framework programming, I had this idea that I would 
> like to share with you.
> If some other people like it, I would be more than happy to write a proposal.
> 
> Here is a little draft I wrote as a starting point to discuss.
> Sorry if there is mistakes, I am not an english native speaker.
> Thank you for your feedback.
> 
> ————————————————————————————————————
> 
> Swift proposal: Access modifier blocks
> 
> This proposal introduces a refinement of the way to define access modifier 
> and visibility scope.
> 
> The current keywords private, internal and public are nice, simple to use and 
> makes sense. But, especially in the context of framework development, it can 
> quickly becomes messy and confusing to define the visibility for each member 
> variable, function or enum. Also it takes more time to write and is not ideal 
> to visualize the public interface of a class.
> 
> If a class A has only a few members, that’s ok to write 
> 
> class A {
>    public var member1: Int
>    var member2: Int
>    private var member3: Int
> }
> 
> With a bigger class B, it will looks far less nice
> 
> class B {
>    public var member1: Int
>    var member2: Int
>    private var member3: Int
>    public var member4: Int
>    var member5: Int
>    private var member6: Int
>    public var member7: Int
>    var member8: Int
>    private var member9: Int
>    public var member10: Int
>    private var member11: Int
>    var member12: Int
>    public var member13: Int
>    var member14: Int
>    private var member15: Int
> }
> 
> And now, it’s really messy, takes more time to write and we need to think 
> twice to visualize what could be the public interface of our framework.
> 
> The purpose of this proposal is to allow the definition of the access 
> modifiers for a block of declarations.
> Then our class B could be:
> 
> class B {
>    // Ok then this is part of the public interface of my framework
>    public { 
>        var member1: Int
>        var member4: Int
>        var member7: Int
>        var member10: Int
>        var member13: Int
>    }
>    // This can be used anywhere in my framework
>    internal {
>        var member2: Int
>        var member5: Int
>        var member8: Int
>        var member12: Int
>        var member14: Int
>    }
>    // Here remains my private stuff. Don’t touch it ! Leave me alone ! My 
> preciouuusss
>    private {
>        var member3: Int
>        var member6: Int
>        var member9: Int
>        var member11: Int
>        var member15: Int
>    }
> }
> 
> It increases readability, avoid to write many times the same keywords, which 
> is quiet boring, and helps visualizing the architecture of the framework by 
> highlighting what can create a dependency with other classes inside the 
> framework and with code outside of the framework.
> 
> It might also be useful in protocols. For exemple, a protocol could define a 
> set of methods that can be called only inside the framework and another 
> public one that can be called from outside of the framework.
> Classes defined outside of the framework could only implement the public 
> stuff in the protocol.
> 
> It would have no impact on the existing code as the existing 
> private/internal/public on every single line would still work outside of an 
> access modifier block so developers could move to use this smoothly.
> 
> ————————————————————————————————————
> 
> Please, let me know if you like the idea.
> 
> Cheers,
> 
> Raph
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to