On Mo, 2010-09-27 at 02:55 +0200, Frederik Sdun wrote:
> * Jürg Billeter <[email protected]> [25.09.2010 18:22]:
> > Hi Frederik,
> > 
> > On Sat, 2010-09-25 at 17:20 +0200, Frederik Sdun wrote:
> > > i just pushed two little patches to [0] which allows to add an else
> > > statement to foreach and catch statements.
> > > For foreach, the else block is called if there is no iteration in the
> > > loop.
> > > For the catch clause, the else block is called if no exception was
> > > caught and before the finally statement.
> > > 
> > > Here are 2 little examples:
> > > foreach:
> > > void print_array (string[] args) {
> > >         foreach (var arg in args) {
> > >                 debug(@"arg: $arg");
> > >         } else {
> > >                 debug("no args"); //called if the array is empty
> > >         }
> > > }
> > > void main (string[] args)
> > > {
> > >         string[] test_1 = new string[0];
> > >         string[] test_2 = new string[2]{"hello", "world"};
> > >         print_array (test_1);
> > >         print_array (test_2);
> > > }
> > 
> > The `else` seems to indicate that the code in the else block is reached
> > if the foreach is not successful. However, zero iterations are by no
> > means an unusual condition. In general, I'd like to keep (control flow)
> > statements relatively simple as, in my opinion, it's ok that the code
> > gets more complex when the control flow is more complex. You don't want
> > to hide complex control flow.
> > 
> This is just for convinience, for the not unusual case of:
> if (args.length > 0)
>     foreach(...)
> else
>     ...
That would be confusing for people with Python background, as 'else' is
executed when the loop is exhausted; that is if there was no
return/break in the loop body.

Python documentation of 'for'
=============================
When the items are
exhausted (which is immediately when the sequence is empty), the suite
in the ``else`` clause, if present, is executed, and the loop
terminates.

A ``break`` statement executed in the first suite terminates the loop
without executing the ``else`` clause's suite.  A ``continue``
statement executed in the first suite skips the rest of the suite and
continues with the next item, or with the ``else`` clause if there was
no next item.

-- 
Julian Andres Klode  - Debian Developer, Ubuntu Member

See http://wiki.debian.org/JulianAndresKlode and http://jak-linux.org/.


_______________________________________________
vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to