A quick way to make a codebase more readable is to extract long or complex conditions / predicates to their own functions. The function’s name will explain to the reader what is being checked allowing her to move forward instead of trying to figure out the context or the calculations that are taking place.
Completed tasks of the last two days
Lets assume that we have a piece of code that prints all tasks that were created in the last two days and are, as the business experts calls them, completed. Which means that are either
We have two distinct concepts that can be extracted. One that will explain the date calculations and one that will force the business knowledge behind those two statuses.
The calculations can be extracted to a private function but since we are using Kotlin we will extract them to an extension function to make the code even more readable:
Another benefit of having “the mentality of extraction” (yep, I just made it up) is that eventually we will come across a case like the
completed which is a business term that has not been transferred to the codebase!
So we don’t just make the code more readable but we improve our domain representation and force a rule that until now was known through documentations or, even worse, through conversations only.
The reader will not have to make any calculations while reading this code or trying to understand why only those statuses are being checked.
The code speaks for itself!