I personally prefer if(conditiona && conditionb && conditionc &&conditiond) { //do something }
it is shorter and more clear to me not sure about performance, but I guess "if(conditiona && conditionb && conditionc &&conditiond)" should produce better native code On Thu, Nov 19, 2015 at 2:16 PM, Harbs <harbs.li...@gmail.com> wrote: > There’s a coding pattern that I like to use which I picked up from the > InDesign SDK. When there’s some code which needs a lot of conditions to be > executed, it’s hard to write the conditions in a way that’s easily human > readable. > > You can either do: > if(conditiona && conditionb && conditionc &&conditiond( > { > //do something > } > > or: > if(conditiona){ > if(conditionb){ > if(conditionc){ > if(conditiond){ > // do something > } > } > } > } > > Both of these are kind of hard on the eyes and make fixes error-prone. > > The do-while-false solution is much more ledgible than both of these and > it goes like this: > > do{ > if(!conditiona){break}; > if(!conditionb){break}; > if(!conditionc){break}; > if(!conditiond){break}; > //do something > }while(false); > > The reason it works is that do-while-false executes exactly once, and > break leaves the “loop”. > > The pattern reverses the logic and instead of checking when you *should* > execute the code, it checks when you should bail out. The reason I like > this pattern is because it makes for much flatter code and each condition > stands on its own. That makes it easy to read and fix conditions at a later > point. > > How do folks feel about trying to use this pattern? > > What prompted this post is commit b29975c which attempts to make a mess of > conditions for invalidateSkinState() a bit clearer. > > Thoughts? > Harbs -- WBR Maxim aka solomax