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/