On 2009-06-21 21:14:53 -0400, Daniel Keep <daniel.keep.li...@gmail.com> said:

Michiel Helvensteijn wrote:
Daniel Keep wrote:

I like the idea from a DRY perspective.

How so? I don't see anything 'repeated' in the before-case.

The 'try' keyword is redundant.  The presence of any number of catches
or a finally indicates that the block must trap exceptions.  If there
are no catches or a finally, then a try by itself would be pointless.

I disagree that 'try' is redundent. I say it resolves an ambiguity. For instance, it makes a big difference here depending on where you write your 'try':

        foreach (a; b) try {
                ...
        } catch (Exception e) {
                ...
        }

vs.

        try foreach (a; b) {
                ...
        } catch (Exception e) {
                ...
        }

With proper indentation and some unnecessary braces removed, it's basically this:

        try
                foreach (a; b)
                        ...;
        catch (Exception e)
                ...;

vs.

        foreach (a; b)
                try
                        ...;
                catch (Exception e)
                        ...;

Repeat for other control structures ('while', 'if', 'else') and you'll find that the only place where 'try' can be elided is for standalone blocks not part of any control structure, and for the function body. Also, not all braces create blocks: 'static if', 'version' and 'debug' don't create a block even with braces, so you couldn't add catch after these. I think that consistently requiring 'try' is clearer than making it optional only in some circumstances.

That said (throwing another idea into the discussion), I wouldn't be against making braces optional around a function body with only one statement:

        int f(int i)
                return i+1;

in which case you could also write:

        int f(int i)
                try
                        return i+1;
                catch (Exception e)
                        return 0;

--
Michel Fortin
michel.for...@michelf.com
http://michelf.com/

Reply via email to