On Wednesday, September 6, 2017 at 4:03:40 PM UTC+5:30, ROGER GRAYDON CHRISTMAN wrote: > On 5 Sep 2017 14:28:44, (Dennis Lee Bier) wrote: > > On 5 Sep 2017 17:57:18 GMT, <a onclick="addTo('ram')"
> > >> But what does "a C++ reference" refer to? > >> > > > Per Stroustrup (The C++ Programming Language 4th Ed, page 189) > > > """ > > * ...> * A reference always refers to the object to which it was > > initialized. > > * ... > > > A reference is an alternative name for an object, an alias. ... > > """ > > > {Hmmm, and I see that the syntax can be used outside of parameter > > declaration -- which is the only place I'd seen it previously... either > > this is a change from earlier standards, or my classes just didn't feel the > > need to expose a non-parameter reference -- since, based upon the above > > book, you can not declare a bare reference "variable"; it MUST be > > initialized with a real object.} > > I think I can say something about this, having been a teacherof the classes > you refer to. I intentionally avoided reference variables. > IMO, the 'good' use for declaring a new reference variable (i.e. not > parameter)would be when (1) the object to which you refer to is > time-consuming to access(2) you plan to refer to this object more then once, > and don't want to repeatthat time-consuming process, and (3) you really want > a reference, and not a copy. > The first two years of programming courses really do not have a purposethat > meets all three, so can "didn't feel the need" is probably applicable. > I intentionally avoided them because reference variables simply compoundthe > problem of aliasing, so unless you really limit your reference variableto a > very tight sandbox, you could be causing more headache than you save. > I do admit to occasionally defining a method that returned a reference,such > as one that overloads the [] operator. But even so, I would generallybe > reluctant to giving an outside client a direct access to my > database'sinternal structures. (Thank you Python for separating __getitem__ > and __setitem__) > Python doesn't eliminate aliasing, of course, since most assignment > operationscreate aliases. But at least it's nice to know that aliasing > immutable valuesis harmless. Hence my unit on building recursive data > structures entirelyout of tuples. The realization that immutability is a significant virtue is now beginning to percolate mainstream programming Ive seen it in recent C# books as a definite recommendation… Something like - Use value types - Use getters but no setters And you have a good design Python makes this hard by giving less status to immutable types than mutable ones - set comprehensions exist not frozenset comprehensions - Likewise tuples and lists -- https://mail.python.org/mailman/listinfo/python-list