| name | clean-code-summary |
| description | Reference clean code principles for readability, maintainability, naming, function design, tests, and code smell checks. Use when reviewing code quality, planning refactors, or checking whether a change stays simple and understandable. |
| argument-hint | Describe the code, change, or review target you want evaluated against the clean code summary. |
Clean Code Summary
Code is clean if it can be understood easily by everyone on the team. Clean code can be read and enhanced by a developer other than its original author. With understandability comes readability, changeability, extensibility, and maintainability.
General Rules
- Follow standard conventions.
- Keep it simple stupid. Simpler is always better. Reduce complexity as much as possible.
- Boy scout rule. Leave the campground cleaner than you found it.
- Always find root cause. Always look for the root cause of a problem.
Design Rules
- Keep configurable data at high levels.
- Prefer polymorphism to if/else or switch/case.
- Separate multi-threading code.
- Prevent over-configurability.
- Use dependency injection.
- Follow Law of Demeter. A class should know only its direct dependencies.
Understandability Tips
- Be consistent. If you do something a certain way, do all similar things in the same way.
- Use explanatory variables.
- Encapsulate boundary conditions. Boundary conditions are hard to keep track of. Put the processing for them in one place.
- Prefer dedicated value objects to primitive type.
- Avoid logical dependency. Do not write methods that work correctly depending on something else in the same class.
- Avoid negative conditionals.
Names Rules
- Choose descriptive and unambiguous names.
- Make meaningful distinction.
- Use pronounceable names.
- Use searchable names.
- Replace magic numbers with named constants.
- Avoid encodings. Do not append prefixes or type information.
Functions Rules
- Small.
- Do one thing.
- Use descriptive names.
- Prefer fewer arguments.
- Have no side effects.
- Do not use flag arguments. Split methods into several independent methods that can be called from the client without the flag.
Comments Rules
- Always try to explain yourself in code.
- Do not be redundant.
- Do not add obvious noise.
- Do not use closing brace comments.
- Do not comment out code. Just remove it.
- Use comments as explanation of intent.
- Use comments as clarification of code.
- Use comments as warning of consequences.
Source Code Structure
- Separate concepts vertically.
- Related code should appear vertically dense.
- Declare variables close to their usage.
- Dependent functions should be close.
- Similar functions should be close.
- Place functions in the downward direction.
- Keep lines short.
- Do not use horizontal alignment.
- Use white space to associate related things and disassociate weakly related things.
- Do not break indentation.
Objects and Data Structures
- Hide internal structure.
- Prefer data structures.
- Avoid hybrid structures that are half object and half data.
- Should be small.
- Do one thing.
- Use a small number of instance variables.
- A base class should know nothing about its derivatives.
- It is better to have many functions than to pass some code into a function to select a behavior.
- Prefer non-static methods to static methods.
Tests
- One assert per test.
- Readable.
- Fast.
- Independent.
- Repeatable.
Code Smells
- Rigidity. The software is difficult to change. A small change causes a cascade of subsequent changes.
- Fragility. The software breaks in many places due to a single change.
- Immobility. You cannot reuse parts of the code in other projects because of involved risks and high effort.
- Needless complexity.
- Needless repetition.
- Opacity. The code is hard to understand.