> On 7 Apr 2017, at 10:33, Yuriy Tymchuk <[email protected]> wrote:
> 
> Hi, there is a rule that suggests to use and/or boolean operations instead of 
> multiple returns.
> 
> For example it suggests agains using:
> 
>       isTranslucentButNotTransparent
>               
>               backgroundColor ifNil: [ ^ true ].
>               (backgroundColor isColor and: [ backgroundColor 
> isTranslucentButNotTransparent ]) ifTrue: [ ^ true ].
>               (borderColor isColor and: [ borderColor 
> isTranslucentButNotTransparent ]) ifTrue: [ ^ true ].
>               ^ false
> 
> Instead you should use:
> 
>       isTranslucentButNotTransparent
>               
>               ^ backgroundColor isNil or: [
>               (backgroundColor isColor and: [ backgroundColor 
> isTranslucentButNotTransparent ]) or: [
>               borderColor isColor and: [ borderColor 
> isTranslucentButNotTransparent ] ] ]
> 
> And at least a few developers think that the suggested implementation is more 
> complicated to comprehend.
> 

I really do not like the complex boolean expressions… my brain can understand 
the “check and return” guards extremely fast:

                backgroundColor ifNil: [ ^ true ].
                (backgroundColor isColor and: [ backgroundColor 
isTranslucentButNotTransparent ]) ifTrue: [ ^ true ].
                (borderColor isColor and: [ borderColor 
isTranslucentButNotTransparent ]) ifTrue: [ ^ true ].
                ^ false

while for the nesting everything in one huge or: /and: expression I have to 
think. I always feel that replacing the “guard” 
style with complex nested booleans makes the code worse.

I really would like to remove the rule.

        Marcus

Reply via email to