I like it +1 :) LieGrue, strub
--- On Wed, 9/30/09, David Blevins <[email protected]> wrote: > From: David Blevins <[email protected]> > Subject: Style: "Flattening" code blocks > To: [email protected] > Date: Wednesday, September 30, 2009, 8:00 AM > There are places in the code that > have excessive nesting. For some reason books show > this and everyone does it and I certainly did at first too, > but having to deal with trees of logic 3-4 levels deep can > really be a pain. Many times the logic can be made > completely linear with no else cases. A big sign of > that is when you repeat your else case many times. > > I started to work an example in email, but refactoring is > hard to describe once you get beyond one or two steps and > decided to just show you what I mean: > > http://people.apache.org/~dblevins/ExcessNesting.mov > > That video basically shows how this: > > public boolean hasBinding2(List<Class<? > extends Annotation>> bindingTypes, > List<Annotation> annots) > { > boolean result = false; > > if (bindingTypes != null > && annots != null && (bindingTypes.size() == > annots.size())) > { > int i = 0; > for (Class<? > extends Annotation> bindingType : bindingTypes) > { > if > (this.interceptorBindingSet.containsKey(bindingType)) > { > > Annotation target = > this.interceptorBindingSet.get(bindingType); > > if > (AnnotationUtil.hasAnnotationMember(bindingType, > annots.get(i), target)) > > { > > result = true; > > } > > else > > { > > return false; > > } > } > > else > { > > return false; > } > > > i++; > } > } > > return result; > } > > Can be turned into this: > > public boolean hasBinding(List<Class<? > extends Annotation>> bindingTypes, > List<Annotation> annots) > { > if (bindingTypes == null || > annots == null) return false; > if (bindingTypes.size() != > annots.size()) return false; > if (bindingTypes.size() == 0) > return false; > > int i = 0; > for (Class<? extends > Annotation> bindingType : bindingTypes) > { > Annotation target > = this.interceptorBindingSet.get(bindingType); > > if (target == > null) return false; > > if > (!AnnotationUtil.hasAnnotationMember(bindingType, > annots.get(i), target)) return false; > > i++; > } > > return true; > } > > > Not sure if people like this style of code, but figured I'd > share and see what you all thought. > > > -David > >
