Select Git revision
userListener.go
code-standards.md 22.92 KiB
The Official XX Network Kotlin Style Guide (in progress)
Goals
Use of this style guide ensures:
- Maintainability
- Conciseness
- Readability
- Simplicity
Inspiration
Most of this guide statements are drawn or adapted from one of the following sources:
Google Java Style Guide - Old school can still be contemporary
Android Kotlin Style Guide - Official Android style guide
Kotlin Coding Conventions - Official Kotlin guidelines for coding
Android Contributors Style Guide - Contribution insights on open sourcing
Google Swift Guide - General Formatting and Rules that can be applied to Kotlin, as they share many syntax similarities
Table of Contents
Click to expand
Naming
Kotlin is a JVM-compatible language like Java, and naming should follow Kotlin standards.
Packages
- Package names are all lower-case
- Multiple words are discouraged
- If multiple words are needed, they can be used concatenated together, without hyphens or underscores
BAD
io.Elixxir.some_widget
GOOD
io.elixxir.somewidget
Classes, Objects & Interfaces
- Written in UpperCamelCase
BAD
open class myExampleClass { /*...*/ }
object emptyObject : myExampleClass() { /*...*/ }
interface myInterface { /*...*/}
GOOD
open class MyExampleClass { /*...*/ }
object EmptyExampleClass : MyExampleClass() { /*...*/ }
interface MyInterface { /*...*/}
Methods
- Written in lowerCamelCase, without hyphens or underscores
BAD
fun ProcessRequests() { /*...*/ }
var finishedCount = 1
GOOD
fun processRequests() { /*...*/ }
var finishedCount = 1
Properties
- Generally, written in lowerCamelCase
- Properties should not be named with Hungarian notation, as it is as it is not recommended by Google
- Constant values in the companion object should be written all uppercase using underscores in cases with multiple words
Example property names
BAD
class MyClass {
var publicfield: Int = 0
val Person = Person()
private var mPrivateField: Int?
}
GOOD
class MyClass {
var publicField: Int = 0
val person = Person()
private var privateField: Int?
}