Tag: extensibility

  • I like Python’s way to format strings because you can use it everywhere, it’s part of the strings. You can do

    print("Welcome %s!" % user.name)

    as you can do

    Console.Writeln("Welcome {0}!", user.Name)

    But then in Python you can also do

    randomMethodThatTakesAString("Welcome %s!" % user.name)

    In C# it gets trickier, because the call to Console.Writeln takes extra arguments for the string arguments, while RandomMethodThatTakesAString doesn’t. It just takes a string. So the only way to go is

    RandomMethodThatTakesAString(String.Format("Welcome {0}!", user.Name))

    which is ugly.

    Thanfully C# 3.0 has extension methods, so I quickly wrote this method:

    blah blah

    and now I can write:

    RandomMethodThatTakesAString("Welcome {0}".Args(user.Name))

    which is more verbose that Python’s version, but equally nice in my eyes.

    If you can understand why allowing the language to be extendable in one aspect was a win here, then you can understand why so many, me included, love Lisp that is extendable in every possible way.

    Reviewed by Daniel Magliola. Thank you!

    Update 2009-09-17: For those complaining that I didn’t show how I did it, here is the Args method:

    public static class StringExtensions {
        public static string Args(this string str, params object[] args) {
            return String.Format(str, args);
        }
    }