Why this matters
Prevents propagation of invalid state and reduces downstream error handling complexity.
Validate required parameters at boundaries using require/requireNotNull or explicit validators; fail fast with actionable messages.
Prevents propagation of invalid state and reduces downstream error handling complexity.
Side-by-side examples engineers can pattern-match during review.
fun createUser(email: String?) { save(email!!) }fun createUser(email: String?) {
require(!email.isNullOrBlank()) { "email is required" }
save(email)
}fun f(id: String?) { use(id!!) }fun f(id: String?) { require(!id.isNullOrBlank()) { "id required" } }From the same buckets as this rule.
Check if loops use equality operators (== or !=) in termination conditions. These can lead to infinite loops if the condition is never met exactly. Instead, use relational operators like < or > for safer loop termination.