On 02.08.2017 14:11, Víctor Pimentel Rodríguez via swift-evolution wrote:
On Wed, Aug 2, 2017 at 12:26 PM, Tino Heth via swift-evolution <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:


    That would work as well, but it has the downside of forcing a potentially 
huge
    number of methods to be implemented in a single place, reducing the 
readability
    as opposed to packing them into semantically related groups in the form of
    extensions.
    I really don't get why people are so obsessed with same-file extensions:
    They are recommended in style guides, influencers blog about them, and they
    motivated a ridiculous complex change in the access rights system. Yet I 
haven't
    seen any evidence that they offer real benefit.
    Extensions are great for adding useful helpers to existing types, and still 
allow
    you to selectively expose details of your own classes — but most people 
seem to
    ignore those options and focus on something can be done better with plain 
old
    comments.
    [sorry for the rant — but I think a critical look at extensions is long 
overdue:
    I rarely see someone questioning their role, so basically, we are making
    important decisions based on pure superstition]

    A protocol itself is already a vehicle to group related methods, and if you 
have
    a huge entity, it doesn't get better just because you split it and hide its
    complexity.


In my organization we use same file extensions to group methods by visibility (and also by protocol conformance), so instead of:

Small offtopic.
Just wanted to note, that access level of 'private' method inside type declaration and method in 'private' extension is not the same.

In second case you have actually *fileprivate* access level for 
method6..method9.
So, strictly speaking, you can't move/group 'private' methods from type declaration into 'private extension' without explicitly marking each method in extension as 'private'.

I do believe 'private extension' should mean 'real' private access, given other extensions of the type(and the type declaration itself) in same file now see private declarations. But as I understand, this sheep has sailed.

Vladimir.


public class MyClass {
     public func method1() {}
     public func method2() {}
     public func method3() {}
     public func method4() {}
     public func method5() {}
     private func method6() {}
private func method7() {}
private func method8() {}
private func method9() {}
}

We write:

public class MyClass {
}

public extension MyClass {
func method1() {}
     func method2() {}
     func method3() {}
     func method4() {}
     func method5() {}
}

private extension MyClass {
     func method6() {}
     func method7() {}
func method8() {}
     func method9() {}
}

The main reason is not having to repeat the visibility modifier, although this brings several other advantages and makes our code style more consistent and easier to follow:

- It forces us to put the private methods at the end of the file, and that's good because they are implementation details and thus not the first thing a reader should see. You could do this with comments, but the syntactic separation seems stronger. - It makes trivial switching the visibility of the "public methods". For example we extracted some frameworks from our app and thanks to this organization it was trivial to change every internal definition to public ones.
- It also works with other modifiers like @objc.

--
Víctor Pimentel


_______________________________________________
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
        • Re: [swift-ev... Gor Gyolchanyan via swift-evolution
          • Re: [swif... Víctor Pimentel Rodríguez via swift-evolution
            • Re: ... Gor Gyolchanyan via swift-evolution
          • Re: [swif... Tino Heth via swift-evolution
            • Re: ... Gor Gyolchanyan via swift-evolution
              • ... Tino Heth via swift-evolution
              • ... Gor Gyolchanyan via swift-evolution
              • ... Mike Sanderson via swift-evolution
              • ... Gor Gyolchanyan via swift-evolution
        • Re: [swift-ev... Víctor Pimentel Rodríguez via swift-evolution
          • Re: [swif... Vladimir.S via swift-evolution
        • Re: [swift-ev... Taylor Swift via swift-evolution
          • Re: [swif... Gor Gyolchanyan via swift-evolution
            • Re: ... Taylor Swift via swift-evolution
              • ... Gor Gyolchanyan via swift-evolution
              • ... Tino Heth via swift-evolution
              • ... Gor Gyolchanyan via swift-evolution
              • ... Taylor Swift via swift-evolution
              • ... Gor Gyolchanyan via swift-evolution
              • ... Christopher Kornher via swift-evolution
  • Re: [swift-evolution] [Pro... Xiaodi Wu via swift-evolution

Reply via email to