Hoist Loop from If¶
Sourcery refactoring id: hoist-loop-from-if¶
Description:¶
Moves loops that occur in all cases of an if statement outside of the conditional
Before:¶
def sing_song(self): if style == 1: while thing_true(): do_x() elif style == 2: while thing_true(): do_y() elif style == 3: while thing_true(): do_z() After:¶
def sing_song(self): while thing_true(): if style == 1: do_x() elif style == 2: do_y() elif style == 3: do_z() Explanation:¶
Where the same for or while loop is defined in all branches of a conditional, the code can be considerably shortened and clarified by hoisting. By moving the loop outside, duplication is removed and the code becomes much clearer.