Jonathan M Davis wrote: > writeln() isn't a property because it makes no sense to replace it with a > getter or setter. The same goes for save() or popFront() on a range. > However, things like length() and empty() are properties because they > could be replaced with functions like getLength() and isEmpty().
Okay. After some thought, I recant what I said about save (but not the rest). It's _is_ a property (or at least a pseudo-property), but it's poorly named (as Steven has been saying). Personally, I would say that for a function to make sense as a property, you should be able to rewrite its name as a getter or setter and have it make sense - e.g. length as getLength(). save doesn't work as getSave(), so it's poorly named. Something like copy - therefore getCopy() as a getter - would make more sense. dup would be even better, but I'm not sure that that would work given how dup is already used with arrays. In any case, I'd say it's a pseudo-property rather than a property because it really isn't a property of the range. It's returning a copy of the range rather than any property of that range. It would make no sense whatsoever for save to be a member variable of the range. But it _does_ make sense to have a getter which returns a copy, so save is definitely one of those weird cases where something is a property, but it isn't. In this case, Andrei appears to have chosen for it to be a property. - Jonathan M Davis
