I was working with a proprietary programming language called Traction
<www.tractionsoftware.com>, and I noticed something pretty cool they
had in their loop constructs.
Consider the following Ruby code:
every_other = true
people.each do |person|
every_other = !every_other
row_class = every_other ? 'row1' : 'row2'
puts "<tr class=#{row_class}><td>#{person.name}</td>
<td>#{person.email}</td></tr>"
end
This code prints out an HTML table of peoples' names and e-mail
addresses. The <tr> tags alternate with having class="row1" and
class="row2", allowing every other row to be colored differently.
Consider these two lines of the code, though:
every_other = true
every_other = !every_other
These lines could be replaced by syntax sugar. Traction has the
following "Special Loop Tags":
<loop.first>: true if this is the first iteration of the loop
<loop.inner> true if this is not the first or last iteration of the
loop
<loop.odd> true if this is an odd iteration
<loop.last>: true if this is the last iteration of the loop
(In the case of nested loops, they apply to the innermost loop.) Maybe
Ruby could use this sort of syntax sugar, too? So in my example above,
there would be a built-in variable that replaces my "every_other"
variable.