if(;){} opinion

Charles noone at nowhere.com
Mon Feb 27 15:06:27 PST 2006


Nice, this gets my vote.

David Medlock wrote:
> Georg Wrede wrote:
> 
>> Better 'fess up front: the intent of this post is to once and for all 
>> murder, pulverize and extradite the new if construct.
>>
>> Consider:
>>
>>         if (m; std.regexp.search("abcdef", "b(c)d"))
>>         {
>>             writefln("[%s]", m.pre);      // prints [a]
>>             writefln("[%s]", m.post);     // prints [ef]
>>             writefln("[%s]", m.match(0)); // prints [bcd]
>>             writefln("[%s]", m.match(1)); // prints [c]
>>             writefln("[%s]", m.match(2)); // prints []
>>         }
>>
>> Flauting this around has shown that experienced programmers have a 
>> hard time figuring out what is going on here.
>>
>> Consider:
>>
>>         if (m; std.regexp.search("abcdef", "b(c)d"))
>>
>> Most everybody take it for granted that here is a typo, the '(m;' must 
>> be the result of a sloppy copy-paste.
>>
>> And in the previous case the theories ranged from all kinds of 
>> behind-the-scenes magic.
>>
>> Now consider:
>>
>>         if (Regexp m = std.regexp.search("abcdef", "b(c)d"))
>>         {
>>             writefln("[%s]", m.pre);      // prints [a]
>>             writefln("[%s]", m.post);     // prints [ef]
>>             writefln("[%s]", m.match(0)); // prints [bcd]
>>             writefln("[%s]", m.match(1)); // prints [c]
>>             writefln("[%s]", m.match(2)); // prints []
>>         }
>>
>> Flaunting this around (to both the original programmers, and also to 
>> virgin victims), gave the same, _immediate_ comment from everybody: 
>> "Ah, that's neat!"
> 
> 
> I would say extend the with(...) construct to silently fail( and take an 
> else clause ) if the object of the with statement is null.
> 
> with( Regexp m = std.regexp.search(...) )
> {
>   ...
> }
> else { ... }
> 
> Of course foreach is still preferred for multi returned values.
> 
> -DavidM
> 



More information about the Digitalmars-d mailing list