Accessors, byLine, input ranges
Steven Schveighoffer
schveiguy at yahoo.com
Fri Jan 29 05:18:46 PST 2010
On Fri, 29 Jan 2010 08:03:13 -0500, Michel Fortin
<michel.fortin at michelf.com> wrote:
> On 2010-01-29 06:25:44 -0500, Pelle Månsson <pelle.mansson at gmail.com>
> said:
>
>> On 01/29/2010 05:48 AM, Michel Fortin wrote:
>>> No. Calling byLine doesn't change the stream. It returns a different
>>> view of stdin, which can be used to modify the stream, or not. I think
>>> it should be a property. If it was 'getNextLine' then it should be a
>>> function. As a proof, this doesn't have any effect:
>>> stdin.byLine;
>> It reads a line off stdin. Try it.
>
> Ah, I see, you're right. Silly me for not trying.
>
> So it's not an accessor after all. The problem is that, even
> disregarding the property syntax, the name strongly suggests it's an
> accessor, but it has side effects, which it shouldn't. Either we change
> the name to something else, like 'consumeLines()', or we make it behave
> like an accessor. I'd go for the second option.
>
> The basic problem lies in the very basic definition of an input range.
> Due to its interface (popFront + front), an input range is forced to
> consume the its first element by its mere existence. I think
> constructing an input range shouldn't have side effects. It should be
> more symmetrical with an output range. It could have just one function,
> 'take' to get the next element, and now byLine could work correctly.
Hey, it's that dead horse again, let's beat it!
Andrei and I and several others discussed this ad infinitum. You will
never convince Andrei that his design is wrong :)
The truth is, the fact that byLine modifies stdin by its mere existence
proves to be inconsequential. Nobody will fetch the byLine property
without using it. It's still an accessor.
-Steve
More information about the Digitalmars-d
mailing list