Kotlin Best Practices
Priority: P1 (HIGH)
Engineering standards for clean, maintainable Kotlin systems.
Implementation Guidelines
- Scope Functions:
apply: Object configuration (returns object).also: Side effects / validation / logging (returns object).let: Null checks (?.let) or mapping (returns result).run: Object configuration and mapping (returns result).with: Grouping multiple method calls on an object (returns result).
- Backing Properties: Use
_state(private mutable, e.g.,private val _state = MutableStateFlow(initial)) exposed asval state = _state.asStateFlow()(public read-only). Pattern:_propprivate,proppublic. - Collections: Expose
List/Map(read-only) publicly; keepMutableListinternal. - Error Handling: Use
runCatchingfor simple error handling over try/catch blocks. - Visibility: Default to
privateorinternal. Minimizepublicsurface area. - Top-Level: Prefer top-level functions/constants over implementation-less
objectsingletons.
Anti-Patterns
- No Deep Scope Nesting: Limit let/apply nesting to 2 levels; deeper destroys readability.
- No Public var: Use private set or backing properties for encapsulation.
- No Global Mutable State: Avoid mutable top-level variables.