455,515 Members | 1,848 Online Need help? Post your question and get tips & solutions from a community of 455,515 IT Pros & Developers. It's quick & easy.

# More on the cosmetics (if-statements)

 P: n/a Which would you prefer: /* A */ int k = 402; if ( k == 40) { std::cout << "40\n"; } else { std::cout << "Not 40\n"; } /* B */ if ( k == 40) std::cout << "40\n"; else std::cout << "Not 40\n"; I know it depends on taste but I am just curious and would like to hear your pro's and con's. May 31 '07 #1
15 Replies

 P: n/a desktop a écrit : Which would you prefer: /* A */ int k = 402; if ( k == 40) { std::cout << "40\n"; } else { std::cout << "Not 40\n"; } /* B */ if ( k == 40) std::cout << "40\n"; else std::cout << "Not 40\n"; I know it depends on taste but I am just curious and would like to hear your pro's and con's. /* C */ // ... const int magic_k = 402; // ... const int special_k = 40; //k is ... int k = magic_k; // if ( special_k == k ) { std::cout << "40\n"; } else { std::cout << "Not 40\n"; } As for proposition B, it was explicitely forbidden in internal norm in the last two compagny I've been. Michael May 31 '07 #2

 P: n/a On May 31, 3:13 pm, desktop

 P: n/a desktop wrote : Which would you prefer: /* A */ int k = 402; if ( k == 40) { std::cout << "40\n"; } else { std::cout << "Not 40\n"; } /* B */ if ( k == 40) std::cout << "40\n"; else std::cout << "Not 40\n"; I know it depends on taste but I am just curious and would like to hear your pro's and con's. /* C */ if (k == 40) std::cout << "40\n"; else std::cout << "Not 40\n"; I'd like to have braces on separate lines, but for compound statements with only a single inner statement that produces too much clutter, so I won't use braces for those. Pro: it looks cleaner (to me at least) Con: you'll have to add the braces when extending the statements, which can be forgotten - Sylvester May 31 '07 #4

 P: n/a terminator wrote: \ for the sake of maintanance and later correction/improvement 'A' is better ;it prevents algorithmic errors due to later editing and forggeting braces. Further it makes use of debuggers a lot easier. Most of the popular ones I've used (Micrsoft, gdb, Sun) all deal with "lines" as their resolution (unless you switch to instructions). By putting things all on one line, it's hard to break/step on the if condition test separately from the attached statement. May 31 '07 #5

 P: n/a desktop

 P: n/a terminator wrote: On May 31, 3:13 pm, desktop Which would you prefer:/* A */ int k = 402; if ( k == 40) { std::cout << "40\n"; } else { std::cout << "Not 40\n"; }/* B */ if ( k == 40) std::cout << "40\n"; else std::cout << "Not 40\n";I know it depends on taste but I am just curious and would like to hearyour pro's and con's. for the sake of maintanance and later correction/improvement 'A' is better ;it prevents algorithmic errors due to later editing and forggeting braces. Ok but what about this (assuming that there is no such thing as a switch): int k = 40; /* Case 1. */ if (k == 10) { std::cout << "1\n"; } else /* Case 2. */ if (k == 20) { std::cout << "2\n"; } else /* Case 3. */ if (k == 30) { std::cout << "3\n"; } else /* Case 4. */ if (k == 40) { std::cout << "4\n"; } /* INSTEAD OF:*/ /* Case 1: Only 1 element in the list. */ if (k == 10) { std::cout << "1\n"; } else { if (k == 20) { std::cout << "2\n"; } else { if (k == 30) { std::cout << "3\n"; } else { if (k == 40) { std::cout << "4\n"; } } } } May 31 '07 #7

 P: n/a desktop Ok but what about this (assuming that there is no such thing as a switch): int k = 40; /* Case 1. */ if (k == 10) { std::cout << "1\n"; } else /* Case 2. */ if (k == 20) { std::cout << "2\n"; } else /* Case 3. */ if (k == 30) { std::cout << "3\n"; } else /* Case 4. */ if (k == 40) { std::cout << "4\n"; } /* INSTEAD OF:*/ /* Case 1: Only 1 element in the list. */ if (k == 10) { std::cout << "1\n"; } else { if (k == 20) { std::cout << "2\n"; } else { if (k == 30) { std::cout << "3\n"; } else { if (k == 40) { std::cout << "4\n"; } } } } Neither: if (k == 10) { std::cout << "1\n"; } else if (k == 20) { std::cout << "2\n"; } else if (k == 30) { std::cout << "3\n"; } else if (k == 40) { std::cout << "4\n"; } May 31 '07 #8

 P: n/a desktop wrote: Which would you prefer: /* A */ int k = 402; if ( k == 40) { std::cout << "40\n"; } else { std::cout << "Not 40\n"; } /* B */ if ( k == 40) std::cout << "40\n"; else std::cout << "Not 40\n"; I know it depends on taste but I am just curious and would like to hear your pro's and con's. Guess I'm the only one who'd go for /*B*/. Some people dislike it, because they tend to forget to add braces when they need to extend the 'if' or 'else' to more statements. To me, a single 'if' or 'else' line rings an alarm bell that beeps "add the braces" whenever I modify it. - J. May 31 '07 #9

 P: n/a Andre Kostur wrote: desktop >Ok but what about this (assuming that there is no such thing as aswitch): int k = 40; /* Case 1. */ if (k == 10) { std::cout << "1\n"; } else /* Case 2. */ if (k == 20) { std::cout << "2\n"; } else /* Case 3. */ if (k == 30) { std::cout << "3\n"; } else /* Case 4. */ if (k == 40) { std::cout << "4\n"; } /* INSTEAD OF:*/ /* Case 1: Only 1 element in the list. */ if (k == 10) { std::cout << "1\n"; } else { if (k == 20) { std::cout << "2\n"; } else { if (k == 30) { std::cout << "3\n"; } else { if (k == 40) { std::cout << "4\n"; } } } } Neither: if (k == 10) { std::cout << "1\n"; } else if (k == 20) { std::cout << "2\n"; } else if (k == 30) { std::cout << "3\n"; } else if (k == 40) { std::cout << "4\n"; } For unsigned 'k': std::cout << "01234"[k / 10 % 5] << "\n"; :-) V -- Please remove capital 'A's when replying by e-mail I do not respond to top-posted replies, please don't ask May 31 '07 #10

 P: n/a Victor Bazarov wrote : Andre Kostur wrote: >desktop >>Ok but what about this (assuming that there is no such thing as aswitch): int k = 40; /* Case 1. */ if (k == 10) { std::cout << "1\n"; } else /* Case 2. */ if (k == 20) { std::cout << "2\n"; } else /* Case 3. */ if (k == 30) { std::cout << "3\n"; } else /* Case 4. */ if (k == 40) { std::cout << "4\n"; } /* INSTEAD OF:*/ /* Case 1: Only 1 element in the list. */ if (k == 10) { std::cout << "1\n"; } else { if (k == 20) { std::cout << "2\n"; } else { if (k == 30) { std::cout << "3\n"; } else { if (k == 40) { std::cout << "4\n"; } } } } Neither:if (k == 10){ std::cout << "1\n";}else if (k == 20){ std::cout << "2\n";}else if (k == 30){ std::cout << "3\n";}else if (k == 40){ std::cout << "4\n";} For unsigned 'k': std::cout << "01234"[k / 10 % 5] << "\n"; :-) V Which is not really the same if 'k' is not either one of the values in the if statements ;) - Sylvester May 31 '07 #11

 P: n/a On May 31, 7:52 am, Michael DOUBEZ

 P: n/a On May 31, 7:13 am, desktop

 P: n/a On May 31, 1:13 pm, desktop

 P: n/a On May 31, 3:01 pm, desktop

 P: n/a In article , ff*@sss.com says... Which would you prefer: /* A */ int k = 402; if ( k == 40) { std::cout << "40\n"; } else { std::cout << "Not 40\n"; } /* B */ if ( k == 40) std::cout << "40\n"; else std::cout << "Not 40\n"; Like most, I prefer option C (or somewhere around option J, based on the number of "C" options already presented): std::cout << (k == 40 ? "40\n" : "Not 40\n"); or using a bit of boolean math: std::string outputs[] = {"Not 40\n", "40\n"}; std::cout << outputs[k==40]; or getting tricky with the boolean math: std::cout << "Not 40\n"+4*(k==40); Though I'm honsetly not sure I'd consider this one advisable... Between the two you presented, I'd consider A reasonable, and B unacceptable. -- Later, Jerry. The universe is a figment of its own imagination. Jun 3 '07 #16

### This discussion thread is closed

Replies have been disabled for this discussion. 