[
https://issues.apache.org/jira/browse/FREEMARKER-37?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16187662#comment-16187662
]
Ondra Žižka edited comment on FREEMARKER-37 at 10/2/17 5:09 AM:
----------------------------------------------------------------
I agree that just having {{<#continue>}} might lead to an unexpected/undefined
behavior with things like counters, separators etc.
How about having {{<#continue>}} and {{<#skip>}} ? {{<#continue>}} would
count as item used (increment the counter), {{<#skip>}} would not. This would
pass the responsibility to decide whether to increment the counter or not to
the user. It makes sense, because the user knows whether he uses
{{is_even_item}} for coloring table rows, and whether that was already taken
care of (then they would use {{<#continue>}}) or not (then he would use
{{<#skip>}}).
I.e.
{code}
<#list 10..15 as num>
<#if num == 10>
<#continue>
</#if>
<#if num == 11>
<#skip>
</#if>
[${num.index}] == ${num}, ${num.count} items passed, is_first =
${num.is_first?c}
</#list>
{code}
This would print
2 == 12, 1 items passed, is_first=false (I hope I computed right :)
...
Because the {{.counter}} would increment only if the loop is finished or
continued, {{is_first}} would derive from the {{counter == 0}}.
Similarly, {{is_even_item}} and {{is_odd_item}} would check the counter rather
than index.
{{is_last}} would probably have to rely on {{index}}.
Similarly, separators could appear if {{couter > 0 and index < size-1}}, and,
well, the user would have to have some common sense not to expect the separator
appear if he uses {{<#skip>}} before {{<#sep>}}.
was (Author: pekarna):
I agree that just having {{<#continue>}} might lead to an unexpected/undefined
behavior with things like counters, separators etc.
How about having {{<#continue>}} and {{<#skip>}} ? {{<#continue>}} would
count as item used, {{<#skip>}} would not. This would pass the responsibility
to decide whether to increment the counter or not to the user. It makes sense,
because the user knows whether he uses {{is_even_item}} for coloring table
rows, and whether that was already taken care of (then they would use
{{<#continue>}}) or not (then he would use {{<#skip>}}).
I.e.
{code}
<#list 10..15 as num>
<#if num == 10>
<#continue>
</#if>
<#if num == 11>
<#skip>
</#if>
[${num.index}] == ${num}, ${num.count} items passed, is_first =
${num.is_first?c}
</#list>
{code}
This would print
2 == 12, 1 items passed, is_first=false (I hope I computed right :)
...
Because the {{.counter}} would increment only if the loop is finished or
continued, {{is_first}} would derive from the {{counter == 0}}.
Similarly, {{is_even_item}} and {{is_odd_item}} would check the counter rather
than index.
{{is_last}} would probably have to rely on {{index}}.
Similarly, separators could appear if {{couter > 0 and index < size-1}}, and,
well, the user would have to have some common sense not to expect the separator
appear if he uses {{<#skip>}} before {{<#sep>}}.
> ability to skip iteration in a list
> -----------------------------------
>
> Key: FREEMARKER-37
> URL: https://issues.apache.org/jira/browse/FREEMARKER-37
> Project: Apache Freemarker
> Issue Type: Improvement
> Reporter: Ivan Levchenko
>
> Sorely missing ability to skip through an iteration of a list and continue on
> with the rest of the list. would like to write clean code like this:
> <#list collection as element>
> <#if element.attr1 == "some_value">
> <#continue /> <#-- skip over this item and run next item in
> loop -->
> </#if>
> do stuff here
> </#list>
> Thanks!
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)