Source: https://www.cs.cornell.edu/courses/cs2110/2019su/discussions/d7-refactoring.pdf