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.