-
Notifications
You must be signed in to change notification settings - Fork 0
Rationales
When declaring string and primitive variables, it is tempting to use simple names based on their type. In fact, they are usually recommendations given by the IDE. But these names are not descriptive and hard to understand what their purpose is.
val string = "Alice"
val int = 30
Built-in methods like toString
, hashCode
and equals
are often placed at
the end of the class. They are unrelated to the rest of the class and can be
distracting when reading the source code.
class User(val firstName: String, val lastName: String) {
var isAdmin: Boolean = false
override fun toString(): String = "$lastName, $firstName"
override fun hashCode(): Int = Objects.hash(firstName, lastName)
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is Robot) return false
return firstName == other.firstName && lastName == other.lastName
}
fun promote() {
isAdmin = true
}
}
when
statement are useful to replace if-else
statements when there are
multiple branches. In a single branch, it is recommended to use an if
statement.
when {
list.isEmpty() -> println("No items")
}
Comment and block comment bodies should not have leading or trailing blank lines. No consecutive blank lines are allowed in the comment body.
/**
*
* The main function.
*
*/
fun main() {
// initialize the logger
//
//
// and print the starting message
val logger = Logger()
logger.info("Starting the application")
}
In a multiline statement, the elvis operator should align with chained method calls instead of the same column.
val bananas =
fruits
.filter { it.type == BANANA }
.takeUnless { it.isEmpty() } ?: return
Rules
- Block tag punctuation
- Built-in type priority
- Contract function inlining
- File size limitation
- Import explicity
- Null structural equality
- Predicate call positivity
- Qualifier consistency
- TODO comment formatting
- Trailing comma arrangement
- Utility class instance hiding
- Error
- Flow
- Fold
- Layout
- Name
- Value
- Whitespace
Rationales