byKey and byValue: properties or methods?

Steven Schveighoffer schveiguy at yahoo.com
Fri Jan 20 09:36:54 PST 2012


On Fri, 20 Jan 2012 04:29:12 -0500, Peter Alexander  
<peter.alexander.au at gmail.com> wrote:

> On 20/01/12 12:57 AM, Steven Schveighoffer wrote:
>> On Thu, 19 Jan 2012 18:41:44 -0500, Andrei Alexandrescu
>> <SeeWebsiteForEmail at erdani.org> wrote:
>>
>>> On 1/19/12 4:43 PM, Steven Schveighoffer wrote:
>>>> On Thu, 19 Jan 2012 14:06:00 -0500, torhu <no at spam.invalid> wrote:
>>>>> If the type of byKeys is Range, I would expect to be able to treat it
>>>>> like one. Not like one, then another, then another, then another...  
>>>>> ad
>>>>> infinitum.
>>>>
>>>> I don't know what you mean. You can treat it like one.
>>>>
>>>> -Steve
>>>
>>> It's the rvalue aspect. byKey does not hold a range inside the
>>> hashtable (as a member variable would do). Each use of byKey gives you
>>> a range that you get to iterate from the beginning.
>>
>> The point of a property is to allow for read-only access on something
>> that is logically a property but can only be implemented via a function.
>> byKeys is such a property. There is no way to specify a field that
>> behaves the same. This doesn't make properties invalid or useless.
>
> Can you define what "is logically a property means"? (I assume you meant  
> "field" there)

No, I meant property.  A property is a more general term.  It's a piece of  
data that is associated with an entity.  For example, if you have a ball,  
you might say that the ball is red, or it's bouncy.  Those are  
properties.  In this context (of programming language properties), a  
property can also be a piece of the entity.  For example, the valve stem  
in the ball.

properties do several things:

1. they allow you to avoid storing logically derived data.  For example,  
if I have x and y, and I want to get z = sqrt(x*x + y*y), then I could  
either store z as a field, and update it every time x and y are changed,  
or I can just make a property, which logically acts like a read-only field.
2. they allow encapsulation.  This means, I can give you information or  
mutable pieces of data from an object without actually exposing the data  
to you directly.
3. They allow you to control read/write access to a piece of data,  
including using contracts to check for errors.

byKey is an example of the first -- it's not directly stored, but is  
generated on request.  Since it's not actually stored in the object, the  
other 2 features don't apply.  Which is why I was confused as to the  
nature of the argument above, it's a derived piece of data.  The very  
nature of calculated properties are that you don't get direct access to  
the internal data because it doesn't exist!

-Steve


More information about the Digitalmars-d mailing list