Clean Code Skill
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. Don't write methods which works 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. Don't append prefixes or type information.
Functions rules
- •Small.
- •Do one thing.
- •Use descriptive names.
- •Prefer fewer arguments.
- •Have no side effects.
- •Don't use flag arguments. Split method into several independent methods that can be called from the client without the flag.
Comments rules
- •Always try to explain yourself in code.
- •Don't be redundant.
- •Don't add obvious noise.
- •Don't use closing brace comments.
- •Don't comment out code. Just remove.
- •Use as explanation of intent.
- •Use as clarification of code.
- •Use 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.
- •Don't use horizontal alignment.
- •Use white space to associate related things and disassociate weakly related.
- •Don't break indentation.
Objects and data structures
- •Hide internal structure.
- •Prefer data structures.
- •Avoid hybrids structures (half object and half data).
- •Should be small.
- •Do one thing.
- •Small number of instance variables.
- •Base class should know nothing about their derivatives.
- •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.