3 ms·
K&R isn't that terrible when code is neat and clean, but it starts to have trouble IMO particularly when declarations or conditions wrap to multiple lines. Com
by Merad 9y ago
K&R isn't that terrible when code is neat and clean, but it starts to have trouble IMO particularly when declarations or conditions wrap to multiple lines. Compare the following examples... I personally have to stop and read the code to find the blocks with K&R braces, vs being able to see them at a glance with Allman.
void MyLongMethodName(SomeLongParamType param1, SomeOtherLongParamType param2,
YetAnotherLongParamType param3) {
if (longContrivedVariableName1 == longContrivedVariableName2 &&
longContrivedVariableName1 != longContrivedVariableName3) {
// do stuff
}
}
void MyLongMethodName(SomeLongParamType param1, SomeOtherLongParamType param2,
YetAnotherLongParamType param3)
{
if (longContrivedVariableName1 == longContrivedVariableName2 &&
longContrivedVariableName1 != longContrivedVariableName3)
{
// do stuff
}
}
- lisper 9y agoEmacs autoindent to the rescue: void MyLongMethodName(SomeLongParamType param1, SomeOtherLongParamType param2, YetAnotherLongParamType param3) { if (longContrivedVariableName1 == longContrivedVariableName2 && longContrivedVariableName1 != longContrivedVariableName3) { // do stuff } }
- Rusky 9y agoI treat the parentheses the same way I treat the braces: void MyLongMethodName( SomeLongParamType param1, SomeOtherLongParamType param2, YetAnotherLongParamType param3 ) { if ( longContrivedVariableName1 == longContrivedVariableName2 && longContrivedVariableName1 != longContrivedVariableName3 ) { // do stuff } } I also make liberal use of temporary variables: void MyLongMethodName( SomeLongParamType param1, SomeOtherLongParamType param2, YetAnotherLongParamType param3 ) { auto condition1 = longContrivedVariableName1 == longContrivedVariableName2; auto condition2 = longContrivedVariableName1 != longContrivedVariableName3; if (condition1 && condition2) { // do stuff } } Vertical space is allocated to the actual parameters and conditions, and the extra syntax-only lines exist only to separate chunks. This works well with "paragraphs": void MyLongMethodName( SomeLongParamType param1, SomeOtherLongParamType param2, YetAnotherLongParamType param3 ) { auto condition1 = longContrivedVariableName1 == longContrivedVariableName2; auto condition2 = longContrivedVariableName1 != longContrivedVariableName3; if (condition1 && condition2) { // do stuff } auto someData = buildSomeData(); doSomethingWith(someData); while (someCondition) { // loop } finishUp(); return someData; }