You might have heard people talking about
not duplicating code so that it becomes easy to maintain. Back those days, I didn't know all these and used to make a hell lot of mistakes while programming. By the word
mistake, I mean doing something that makes developing and maintaining software harder than it ought to be. Of course, that helped me learn a lot of principles.
The first thing I learned from my mistakes is not to duplicate code/ideas. Since I was bit by duplicated code very often, I try my best to reduce duplication as much as possible. In this post I am giving a few examples to show how I try to avoid duplication.
Obvious Duplication
The first pattern I recognised in my code was something like the following.
if exam.mark >= 35:
exam.result = 'pass'
logging.debug('Setting result to pass.')
return 'pass'
else:
exam.result = 'fail'
logging.debug('Setting result to fail.')
return 'fail'
Obviously this code is duplicating ideas, so must be
refactored. How will you refactor this to take away the duplication? I will write it this way:
if exam.mark >= 35:
exam.result = 'pass'
else:
exam.result = 'fail'
logging.debug('Setting result to ' + exam.result)
return exam.result
(To be more precise, I will also replace the literals
35
,
'pass'
, and
'fail'
with appropriately named constant variables.)
More Subtle Cases
This is (part of) a PyUnit test case for an imaginary function
double
, that takes a number and multiplies it by 2.
def testDouble(self):
inp = 5
expected = inp * 2
actual = double(inp)
self.assertEqual(expected, actual)
Here, I have used the variable
inp
to avoid having to duplicate the test input I am passing to
double
.
As another example, see this code that assigns a grade to a student based on the mark they have scored.
if mark < 35:
grade = 'N/A'
elif mark >= 35 and mark < 50:
grade = 'D'
elif mark >= 50 and mark < 70:
grade = 'C'
elif mark >= 70 and mark < 90:
grade = 'B'
else:
grade = 'A'
I would rewrite this code like this to avoid duplication of the boundary values (although this is a very small duplication).
if mark < 35:
grade = 'N/A'
elif mark < 50:
grade = 'D'
elif mark < 70:
grade = 'C'
elif mark < 90:
grade = 'B'
else:
grade = 'A'
Tell me about the ways you follow to make your code more maintainable.
No comments:
Post a Comment