Michiel Helvensteijn wrote:
Andrei Alexandrescu wrote:
foreach (line; stdin.byLine()) { ... }
vs.
foreach (line; stdin.byLine) { ... }
How do I choose?
byLine is a property. It is fetching a range on stdin.
-Steve
Damn. I was sure the answer will be different.
byLine() is a function. It changes the state of stdin. Calling it
consecutively will in general result in different return values. If there
were two guys: stdin.currentLine (property) and stdin.nextLine(), it would
be a different story.
A property should act very much like a field. The advantages of properties
are that they can be derived (not have a one-to-one relation with a storage
location) or can do some clever caching/memoizing/logging.
I agree, but I'll also note that I got contradictory opinions from
different supporters of @property. So now it looks all the more like a
judgment call, which is exactly what I was worried in the first place.
Omitting parentheses on an action just because you can is stupid. It
actually makes the language less readable and less predictable. And all
that for saving two keystrokes.
I found my code to be more readable and just as predictable with the
current rule. And it's not about two keystrokes, it's about persistent
and ubiquitous syntactic noise.
Gosh, @property does suck. I was afraid that'd be true.
Andrei