
I'm coding an extension method today, I encounter again the empty statement pattern.
I wanted to write Assert.Success() on successful condition, but alas, there's no Assert.Success(), we only have Assert.Fail() and Assert.Ignore().
So I am compelled to write this:
public static class Helper
 {
  public static void AssertContainsMessage(this string message, string messagePortion)
  {
   if (message.Contains(messagePortion))
    ;
   else
    Assert.AreEqual(message, messagePortion);
  }
 }
However, the compiler balk at the notion that my semicolon code is possibly a mistaken empty statement.
Python has a pass statement...
if i != 0:
        pass
else:
        print 'please check your parameters'
..., and I wish C# allows this explicit intent of an empty statement:
if (i != 0)
    null;
else
    Console.WriteLine("please check your parameters");
That null == empty right? null statement == empty statement. But that is not palatable to most C-based programmers.
So we have to get by with using a block with no statements, this works:
if (i != 0)
    {}
else
    Console.WriteLine("please check your parameters");
Hmmm.. :-) There's no more compiler warning. Typing curly braces requires a more conscious effort, an intent, hence the compiler rationale for not raising a warning; whereas a semicolon, is a second nature on all C-based programmers. Perhaps the best analogy could be is like most people, when they want to click something, they perform double-click, regardless if it is needed or not, it's not a conscious effort, most users just double click. And most C-based programmers just terminate anything with a semicolon.
One time or another, you have mistakenly write a property with semicolon...
public class Person
{
    public int PersonId { get; set; };
}
..., only to quickly backspace that obnoxious semicolon after of closing bracket, how unforgiving compiler!
I digress, just think if the compiler will not balk on empty statement:
if (ans == 'Y');
       IZ_SHREDDIN_UR_FILE_NAO();
    
Advice for morts, heed compiler warnings :-)
 
No comments:
Post a Comment