* 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
    ...
> > catch:
> > public errordomain TestError {
> >         FOO,
> > }
> > public void throw_error (bool t) throws TestError {
> >         if (t) {
> >              throw new TestError.FOO("foo");
> >         }
> > }
> > void test(bool t) {
> >         try { 
> >             throw_error (t);
> >         } catch (TestError e) {
> >             debug("error :(");
> >         } else {
> >             debug("success :)");
> >         } finally {
> >             debug("finally");
> >         }
> > }
> > void main(){
> >         debug("false:");
> >         test(false);
> >         debug("true:");
> >         test(true);
> > }
> 
> What is the difference to the following?
> 
>     try {
>         throw_error (t);
>         debug ("success :)");
>     } catch (TestError e) {
>         debug("error :(");
>     } finally {
>         debug("finally");
>     }
>

You are outside of the try block, which allows you to throw exceptions,
which should be handled in an outer scope.

> > P.S.: There's a another branch, which supports async delegates/lambdas at 
> > [1]
> > which requires some testing/reviewing.
> 
> I definitely like that one. I'll try to review it as soon as possible.
> 
> Thanks,
> Jürg
> 

-- 
IRC: playya @ Freenode, Gimpnet
xmpp: [email protected]
identi.ca: playya

Attachment: signature.asc
Description: Digital signature

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

Reply via email to