Re: looping through a list, starting at 1
On 8/1/2011 10:43 PM, Stefan Ram wrote:
Eric Sosman<email@example.com> writes:
... and "natural" is a little unnatural, it seems to me. If
the various E are truly independent -- if l is merely a Collection
for the purposes of the loop -- one wonders where the interloper at
position 0 came from.
This is code for my new mark-up language. A section might
< [This is an example heading]
[This is the first paragraph of the body.]
[This is the last paragraph of the body.]>
. The first entry of a section always is interpreted as its
heading, so a heading does not require additional mark-up.
The code to convert this section to HTML converts the first
entry ?[This is an example heading]? into an HTML heading
element. Then it loops through the rest of the entries to
convert them to HTML paragraph elements.
It seems to me that the heading doesn't belong in the same
List as the remaining entries: It has special significance and
gets special handling. "I'm at position zero, so..." doesn't
stand out as a robust signifier of the heading's specialness,
and you might want to consider whether to manifest it in other
ways. For example, suppose you decide to introduce the notion
of sub-headings: You'll now need three treatments, but "I'm at
zero" can only divide one of them from the other two. Or maybe
you'd like to generate an index of all the section headings: In
a List of nothing but headings, "I'm at zero" is not special.
One possibility would be to keep the List, but to delegate
the formatting style to the entry itself. Make E abstract with
an abstract toHTML() method, and let headings and body entries
subclass it to provide their own implementations. Implementing
sub-headings then just amounts to writing a new E subclass. For
flexibility's sake, maybe E shouldn't just be "entry" but "entry
with formatter" so you can easily inject other formatters for
generating indexes, tables of contents, "site maps," and so on.
But there ought to be something more significant than "I'm
at position zero" to trigger the special handling. Just sayin'.