> Still naming convention (the thing which ES doesn't use -- and in vain)
> is a good and elegant approach. That is Python (or even Ruby)
> uses.

Brendan already described to you some of the problems with name-mangling 
techniques, and we could argue over whether naming conventions are indeed 
"elegant" programming techniques. But they are useless as language features for 
information hiding. If people want to use naming conventions to suggest privacy 
they can already do so today, with no additional language extensions.

> var foo = {x: 10, :y: 20} // although...
> 
> where :y - is your "private" "Name" symbol.
> 
> Choose any:
> ...
> 
> and so on, there are many interesting naming conventions (which are
> not yet "borrowed" by backward compatibility).

Any of these would merely suggest privacy, without enforcing it. This comes 
with no guarantees whatsoever. The purpose of the private names proposal is to 
provide a mechanism for creating *guaranteed* private object properties. If the 
creator of the object does not share the name value, then no one else can get 
to the property. What you have suggested is just a convention.

> How naming convention will help? -- in any position in code we can
> presiseally say what access level this property has.

No, you can't. All you've done is change the syntax. There's no behavioral 
difference that ensures that one part of the code can access the "private" data 
and another can't.

> Leaving naming conventions (if you will) it is also possible to use
> this "private" keyword in this form:

The private names proposal already includes a declarative syntax for creating 
private names.

    http://wiki.ecmascript.org/doku.php?id=strawman:names

> let obj = {
>  private:
>    foo: 42,
>    bar: 41
> 
>  public:
>    baz: 43
>    getFoo: lambda() this.baz + this.bar;
> };
> ...
> obj.bar = 44; // Error, "bar" is private ?

If "private" is an attribute of the slot but the name is still public, then you 
have not entirely hidden your data representation. You still end up with name 
contention (no one can use the property name "bar" now) and you don't get full 
information hiding (clients can see that you have a property called "bar" and 
change their behavior because of it).

You also haven't said anything about what parts of the code do have access to 
the private properties and what parts of the code don't. If you don't see why 
this is important, then trust me -- it's tricky in a language where objects and 
functions can be arbitrarily lexically nested and functions can be dynamically 
added and removed from objects.

These issues are addressed by the names proposal-- please do take a look.

Thanks,
Dave

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to