--- title: Express Yourself in Code, Not Comments impact: CRITICAL impactDescription: eliminates stale comment risk tags: cmt, self-documenting, refactoring, clarity --- ## Express Yourself in Code, Not Comments In many cases, creating a function that says the same thing as the comment you wanted to write is better. Code can be refactored to be self-explanatory. **Incorrect (comment explains obscure code):** ```java // Check to see if the employee is eligible for full benefits if ((employee.flags & HOURLY_FLAG) && (employee.age > 65)) { // ... } // Add 30 days to the current date Date newDate = new Date(currentDate.getTime() + (30L * 24 * 60 * 60 * 1000)); // Returns true if the string contains only digits boolean result = str.matches("[0-9]+"); ``` **Correct (code expresses intent):** ```java if (employee.isEligibleForFullBenefits()) { // ... } // In Employee class: public boolean isEligibleForFullBenefits() { return isHourlyWorker() && age > RETIREMENT_AGE; } Date newDate = currentDate.plusDays(30); boolean result = StringUtils.isNumeric(str); // Or define your own: boolean result = containsOnlyDigits(str); ``` **Benefits:** - Function names are searchable - Functions can be tested - Code documents itself - No risk of comment becoming stale **When comments are still valuable:** - **Why, not what:** Comments explaining *why* a decision was made (business rules, regulatory requirements, algorithm choices) cannot be replaced by code. - **Warnings:** Thread-safety, performance implications, or non-obvious side effects deserve explicit comments. - **Legal/license comments:** Required by policy and cannot be expressed as code. - **Public API documentation:** Javadoc/docstrings for public APIs are expected and useful. Reference: [Clean Code, Chapter 4: Comments](https://www.oreilly.com/library/view/clean-code-a/9780136083238/)