if(;){} opinion

Georg Wrede georg at nospam.org
Sun Feb 26 10:01:07 PST 2006


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!"



More information about the Digitalmars-d mailing list