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); } }
Leave a Reply