Hello Joanna, seems you are quite new to programming, just kidding, so sad 
you’ve missed the punch card era,
a lot of fun, but I cannot take you back there because my Delorean is broken :o)

Seriously, thank you for writing this, I share your opinion:

> In the light of the preceding paragraphs, I would, respectfully, suggest that 
> "protected" should be allowed for exclusive use in the case of classes that 
> really have to derive from each other, but for no other reason.
Exactly !
> Likewise, "private" should mean what it has meant and still means in most 
> other languages, members of classes only, since, like "protected", that is 
> its true nature.
Yes.
> 
> What Swift presently calls "internal" seems to equate more to the C# concept 
> of "internal" and, in my mind, needs no further discussion or change.
> 
> Just as I was never happy with the Delphi concept of private and protected 
> members being accessible, not just in the class or its derived types, but 
> also from any code in the same code unit, I feel uneasy about the present 
> definition of the private scope in Swift.
> 
Me too.
> I have seen some horrendous abuses of that privileged access, with the 
> gradual growth of single code units to truly gargantuan proportions, just 
> because someone felt that certain classes needed to violate all the rules of 
> common sense and be able to access each others' private parts (if you'll 
> pardon the vernacular).
> 
> 
> 
Especially this, couldn’t agree more:
> Personally, I would like to see the end of the file based scope and, instead, 
> see more clearly defined "privileged" access between types, even if they are 
> in the same code unit.

I would suggest the (true) use of “namespaces”, instead of file based scope,
so that entities  *must*  be imported or qualified by namespace.

When I started with Swift, i was under the false impression that Swift 
concatenates all the sources in a project and simply treat this
as one single source file…

To my knowledge there is no way to hide class members. This is not good !
I’d like to show how i prefer it in this example: 

“private” here means: only visible within the scope where it was declared!  
Imho what private does now in Swift is
completely wrong. 
“Protected” is here: like private but visible in descendants as well 

namespace Eriador
{
class Mithril       // This class is not visible outside the namespace.         
        
{                   // a + b
    var a = 0.0     // should not visible outside this class/instance
    private var b = 1.0    // “private”is the default
    public var c = 1.0     // is visible outside the class
    protected var d = “My precious…”  // is also visible in descendants
    
    init()
    {
        forgeRing()
    }
    
    // to use this function outside, it should be preceeded
    // by a "public" keyword, like it is in Java:

    public func stridingToMordor() -> Double
    {
        return a + b + c
    }
}

} // end namespace Eriador
--------------------------------------------------------
//in another file
#import Foundation

namespace Rohan
{
  #import namespace Eradior

func quest()
 {
   var mi = Mithril()
   mi.a = 10.0          // Error:  “a" and “b" are 
   mi.b = 10.0          // not public members of Aragorn      
   mi.c = 12345.67      // ok 

   print(ar.stridingToMordor()) // ok
 }
}

Just my two cents to this ever lasting theme:
can’t see the wood for the trees anymore.
TedvG






_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to