How would you code it?
-
I use #1 almost exclusively. Why? Because #1 gives me a good idea at first-glance of how the end-result will be structured. value-space-value-!-space-Today is-space-formatted value. And yeah, there's a bug, which will show up the first time this code actually runs if no one sees it sooner - so it's really only an issue if no-one will ever test the code. #2 i find exceedingly tedious to mentally parse into an idea of what the result will look like. For performance, i'll just go with a StringBuilder or some such thing.
Last modified: 6mins after originally posted -- See how easy index errors are to catch at runtime? ;P
every night, i kneel at the foot of my bed and thank the Great Overseeing Politicians for protecting my freedoms by reducing their number, as if they were deer in a state park. -- Chris Losinger, Online Poker Players?
Shog9 wrote:
Why? Because #2 gives me a good idea ...
Don't you mean #1?
Shog9 wrote:
#2 i find exceedingly tedious to mentally parse into an idea of what the result will look like.
I have the same opinion of #1. I have to mentally keep substituting the placeholders for their corresponding values. The more of those there are, the more difficult to visualize. With #2 the values are already neatly layed out in their proper place.
Man is a marvelous curiosity ... he thinks he is the Creator's pet ... he even believes the Creator loves him; has a passion for him; sits up nights to admire him; yes and watch over him and keep him out of trouble. He prays to him and thinks He listens. Isn't it a quaint idea. - Mark Twain
-
Big Daddy Farang wrote:
I think he's fishing for "5" votes.
In that case, he'd asked for "vote 5 for option 1. vote 5 for option 2" !. - MS
malharone wrote:
In that case, he'd asked for "vote 5 for option 1. vote 5 for option 2" !.
I'm actually a bit surprised. I was hoping more people would see things my way. :-)
Man is a marvelous curiosity ... he thinks he is the Creator's pet ... he even believes the Creator loves him; has a passion for him; sits up nights to admire him; yes and watch over him and keep him out of trouble. He prays to him and thinks He listens. Isn't it a quaint idea. - Mark Twain
-
Corrected. Obviously this is the problem with using literal index values... :rolleyes:
every night, i kneel at the foot of my bed and thank the Great Overseeing Politicians for protecting my freedoms by reducing their number, as if they were deer in a state park. -- Chris Losinger, Online Poker Players?
Yes, but next time you'll be more careful and a better writer because of it. :)
-
Shog9 wrote:
Why? Because #2 gives me a good idea ...
Don't you mean #1?
Shog9 wrote:
#2 i find exceedingly tedious to mentally parse into an idea of what the result will look like.
I have the same opinion of #1. I have to mentally keep substituting the placeholders for their corresponding values. The more of those there are, the more difficult to visualize. With #2 the values are already neatly layed out in their proper place.
Man is a marvelous curiosity ... he thinks he is the Creator's pet ... he even believes the Creator loves him; has a passion for him; sits up nights to admire him; yes and watch over him and keep him out of trouble. He prays to him and thinks He listens. Isn't it a quaint idea. - Mark Twain
Al Beback wrote:
I have to mentally keep substituting the placeholders for their corresponding values.
You have to do that both ways. The difference is, #1 just gives you a tiny little "this is a placeholder" mark, while #2 uses the full variable or expression (which is unlikely to be any closer in appearance to the actual result than #1's curly-brace marks, but takes up a whole lot more room. Not to mention requiring parens to separate non-string ops from string ops). Of course, it's a matter of preference - but i'm pretty set in my ways here; i use similar techniques for C++ and even JS, writing my own formatters when there's nothing suitable built-in. You have to do that both ways. The difference is, #1 just gives you a tiny little "this is a placeholder" mark, while #2 uses the full variable or expression**†**. Of course, it's a matter of preference - but i'm pretty set in my ways here; i use similar techniques for C++ and even JS, writing my own formatters when there's nothing suitable built-in. BTW - which of the above paragraphs do you prefer? ;P **†**which is unlikely to be any closer in appearance to the actual result than #1's curly-brace marks, but takes up a whole lot more room. Not to mention requiring parens to separate non-string ops from string ops.
every night, i kneel at the foot of my bed and thank the Great Overseeing Politicians for protecting my freedoms by reducing their number, as if they were deer in a state park. -- Chris Losinger, Online Poker Players?
-
Shog9 wrote:
Why? Because #2 gives me a good idea ...
Don't you mean #1?
Shog9 wrote:
#2 i find exceedingly tedious to mentally parse into an idea of what the result will look like.
I have the same opinion of #1. I have to mentally keep substituting the placeholders for their corresponding values. The more of those there are, the more difficult to visualize. With #2 the values are already neatly layed out in their proper place.
Man is a marvelous curiosity ... he thinks he is the Creator's pet ... he even believes the Creator loves him; has a passion for him; sits up nights to admire him; yes and watch over him and keep him out of trouble. He prays to him and thinks He listens. Isn't it a quaint idea. - Mark Twain
What happens when it becomes
hello + " " + value + " " + value2 + value + " " + item.Format("{0:D}") + hello;
? Is that still easy to visualize and have you looked at the IL that this produces?Deja View - the feeling that you've seen this post before.
-
Yes, but next time you'll be more careful and a better writer because of it. :)
Past experience sez otherwise... ;P
every night, i kneel at the foot of my bed and thank the Great Overseeing Politicians for protecting my freedoms by reducing their number, as if they were deer in a state park. -- Chris Losinger, Online Poker Players?
-
Shog9 wrote:
Why? Because #2 gives me a good idea ...
Don't you mean #1?
Shog9 wrote:
#2 i find exceedingly tedious to mentally parse into an idea of what the result will look like.
I have the same opinion of #1. I have to mentally keep substituting the placeholders for their corresponding values. The more of those there are, the more difficult to visualize. With #2 the values are already neatly layed out in their proper place.
Man is a marvelous curiosity ... he thinks he is the Creator's pet ... he even believes the Creator loves him; has a passion for him; sits up nights to admire him; yes and watch over him and keep him out of trouble. He prays to him and thinks He listens. Isn't it a quaint idea. - Mark Twain
Well, if/when you use a Console.WriteLine(), would you use the format string and parameters?
-
PIEBALDconsult wrote:
The first is more readable, less error-prone
My example demonstrates how it's not less error prone. It's easy to mess up the numbering, or to pass in more or less parameters than expected, or to pass them in the wrong order.
Man is a marvelous curiosity ... he thinks he is the Creator's pet ... he even believes the Creator loves him; has a passion for him; sits up nights to admire him; yes and watch over him and keep him out of trouble. He prays to him and thinks He listens. Isn't it a quaint idea. - Mark Twain
I don't buy it. I just don't see how any variant of
Dim sqlUpdate As String = "UPDATE ls_orderitems SET OrderItemRetailPrice = '" & _
Trim(PartRetailPrice) & "', OrderItemSalePrice = '" & Trim(PartSalePrice) & _
"' WHERE OrderItemPartNum = '" & Trim(PartNum) & "', OrderItemSource = '" & _
Trim(PartSource) & "', OrderType = 'Ron Ayers MotorSports'"can possibly be considered "easier to debug".
A guide to posting questions on CodeProject[^]
Dave Kreskowiak Microsoft MVP Visual Developer - Visual Basic
2006, 2007 -
Here's a simple code snippet (in C#):
string hello = "Hello";
string cp = "CP";
DateTime today = DateTime.Today;// Desired result: "Hello CP! Today is Friday";
string option1 = string.Format("{0} {1}! Today is {3:dddd}", hello, cp, today);
string option2 = hello + " " + cp + "! Today is " + today.ToString("dddd");
Vote 1 if you prefer option1. Vote 5 if you prefer option2. I prefer option2 since it's 1. More readable 2. Less error-prone (note the subtle error in option1 which the compiler won't catch) 3. More efficient (no CPU cycles spent scanning the format string looking for matching curly braces). Cheers!
Man is a marvelous curiosity ... he thinks he is the Creator's pet ... he even believes the Creator loves him; has a passion for him; sits up nights to admire him; yes and watch over him and keep him out of trouble. He prays to him and thinks He listens. Isn't it a quaint idea. - Mark Twain
-
I don't buy it. I just don't see how any variant of
Dim sqlUpdate As String = "UPDATE ls_orderitems SET OrderItemRetailPrice = '" & _
Trim(PartRetailPrice) & "', OrderItemSalePrice = '" & Trim(PartSalePrice) & _
"' WHERE OrderItemPartNum = '" & Trim(PartNum) & "', OrderItemSource = '" & _
Trim(PartSource) & "', OrderType = 'Ron Ayers MotorSports'"can possibly be considered "easier to debug".
A guide to posting questions on CodeProject[^]
Dave Kreskowiak Microsoft MVP Visual Developer - Visual Basic
2006, 2007Oh, well for that you need parameters anyway.
-
What happens when it becomes
hello + " " + value + " " + value2 + value + " " + item.Format("{0:D}") + hello;
? Is that still easy to visualize and have you looked at the IL that this produces?Deja View - the feeling that you've seen this post before.
And don't forget ...
value==null?"null":value.ToString()
... -
What happens when it becomes
hello + " " + value + " " + value2 + value + " " + item.Format("{0:D}") + hello;
? Is that still easy to visualize and have you looked at the IL that this produces?Deja View - the feeling that you've seen this post before.
Pete O`Hanlon wrote:
What happens when it becomes hello + " " + value + " " + value2 + value + " " + item.Format("{0:D}") + hello;?
I prefer it to
string.Format("{0} {1} {2}{1} {3:D}{0}", hello, value, value2, item);
Although it does appear neater, I can't visualize anything here. All I see is 6 placeholders and 4 variables. Bringing it all together mentally is, to me, more difficult.Pete O`Hanlon wrote:
you looked at the IL that this produces
That's the best part. It's the equivalent of string.Concat(hello, " ", value, " ", value2, value, " ", ...);
Man is a marvelous curiosity ... he thinks he is the Creator's pet ... he even believes the Creator loves him; has a passion for him; sits up nights to admire him; yes and watch over him and keep him out of trouble. He prays to him and thinks He listens. Isn't it a quaint idea. - Mark Twain
-
Al Beback wrote:
I have to mentally keep substituting the placeholders for their corresponding values.
You have to do that both ways. The difference is, #1 just gives you a tiny little "this is a placeholder" mark, while #2 uses the full variable or expression (which is unlikely to be any closer in appearance to the actual result than #1's curly-brace marks, but takes up a whole lot more room. Not to mention requiring parens to separate non-string ops from string ops). Of course, it's a matter of preference - but i'm pretty set in my ways here; i use similar techniques for C++ and even JS, writing my own formatters when there's nothing suitable built-in. You have to do that both ways. The difference is, #1 just gives you a tiny little "this is a placeholder" mark, while #2 uses the full variable or expression**†**. Of course, it's a matter of preference - but i'm pretty set in my ways here; i use similar techniques for C++ and even JS, writing my own formatters when there's nothing suitable built-in. BTW - which of the above paragraphs do you prefer? ;P **†**which is unlikely to be any closer in appearance to the actual result than #1's curly-brace marks, but takes up a whole lot more room. Not to mention requiring parens to separate non-string ops from string ops.
every night, i kneel at the foot of my bed and thank the Great Overseeing Politicians for protecting my freedoms by reducing their number, as if they were deer in a state park. -- Chris Losinger, Online Poker Players?
Shog9 wrote:
which of the above paragraphs do you prefer?
1! :-D
Man is a marvelous curiosity ... he thinks he is the Creator's pet ... he even believes the Creator loves him; has a passion for him; sits up nights to admire him; yes and watch over him and keep him out of trouble. He prays to him and thinks He listens. Isn't it a quaint idea. - Mark Twain
-
Well, if/when you use a Console.WriteLine(), would you use the format string and parameters?
PIEBALDconsult wrote:
Well, if/when you use a Console.WriteLine(), would you use the format string and parameters?
No. I would still use concatenation for the same reasons (readability, stability, and efficiency).
Man is a marvelous curiosity ... he thinks he is the Creator's pet ... he even believes the Creator loves him; has a passion for him; sits up nights to admire him; yes and watch over him and keep him out of trouble. He prays to him and thinks He listens. Isn't it a quaint idea. - Mark Twain
-
leppie wrote:
WWCND?
:) I had to look that up.
Man is a marvelous curiosity ... he thinks he is the Creator's pet ... he even believes the Creator loves him; has a passion for him; sits up nights to admire him; yes and watch over him and keep him out of trouble. He prays to him and thinks He listens. Isn't it a quaint idea. - Mark Twain
-
-
What happens when it becomes
hello + " " + value + " " + value2 + value + " " + item.Format("{0:D}") + hello;
? Is that still easy to visualize and have you looked at the IL that this produces?Deja View - the feeling that you've seen this post before.
Or if you need to include a value multiple times? One that is costly to retrieve? With Option2, at best you declare a temporary value for it; but using Option1 doesn't require that. Or if you want to include a value in more than one format, like printing an int in both decimal and hexadecimal.
-
Pete O`Hanlon wrote:
What happens when it becomes hello + " " + value + " " + value2 + value + " " + item.Format("{0:D}") + hello;?
I prefer it to
string.Format("{0} {1} {2}{1} {3:D}{0}", hello, value, value2, item);
Although it does appear neater, I can't visualize anything here. All I see is 6 placeholders and 4 variables. Bringing it all together mentally is, to me, more difficult.Pete O`Hanlon wrote:
you looked at the IL that this produces
That's the best part. It's the equivalent of string.Concat(hello, " ", value, " ", value2, value, " ", ...);
Man is a marvelous curiosity ... he thinks he is the Creator's pet ... he even believes the Creator loves him; has a passion for him; sits up nights to admire him; yes and watch over him and keep him out of trouble. He prays to him and thinks He listens. Isn't it a quaint idea. - Mark Twain
Only for small numbers of strings. If I remember correctly it is <= 3. Anyway, performance shouldn't be much of a concern with either method.
This blanket smells like ham
-
I don't buy it. I just don't see how any variant of
Dim sqlUpdate As String = "UPDATE ls_orderitems SET OrderItemRetailPrice = '" & _
Trim(PartRetailPrice) & "', OrderItemSalePrice = '" & Trim(PartSalePrice) & _
"' WHERE OrderItemPartNum = '" & Trim(PartNum) & "', OrderItemSource = '" & _
Trim(PartSource) & "', OrderType = 'Ron Ayers MotorSports'"can possibly be considered "easier to debug".
A guide to posting questions on CodeProject[^]
Dave Kreskowiak Microsoft MVP Visual Developer - Visual Basic
2006, 2007 -
I don't buy it. I just don't see how any variant of
Dim sqlUpdate As String = "UPDATE ls_orderitems SET OrderItemRetailPrice = '" & _
Trim(PartRetailPrice) & "', OrderItemSalePrice = '" & Trim(PartSalePrice) & _
"' WHERE OrderItemPartNum = '" & Trim(PartNum) & "', OrderItemSource = '" & _
Trim(PartSource) & "', OrderType = 'Ron Ayers MotorSports'"can possibly be considered "easier to debug".
A guide to posting questions on CodeProject[^]
Dave Kreskowiak Microsoft MVP Visual Developer - Visual Basic
2006, 2007Dave Kreskowiak wrote:
can possibly be considered "easier to debug".
I never mentioned debugging. When you debug this, you step over that statement and look at the resulting string. It's the same when using Format.
Man is a marvelous curiosity ... he thinks he is the Creator's pet ... he even believes the Creator loves him; has a passion for him; sits up nights to admire him; yes and watch over him and keep him out of trouble. He prays to him and thinks He listens. Isn't it a quaint idea. - Mark Twain