Skip to content
Shun Hosaka edited this page Nov 18, 2015 · 3 revisions

##1 Introduction(説明) 最新バージョンでのKotlinコーディング規約です。Kotlinの利用として、主にAndroidでのコーディングを想定しています。 This is Kotlin lang coding styles. And some Android coding style in Kotlin.

###1.1 Policy(方針) 方針として、Kotlinのすっきりした書きやすさと、型を意識した見やすさを意識した、カジュアルな書き方を目指すような規約を作成したいと思っています。

###1.2 Difinction(定義) Kotlin Version: 1.0.0beta1103 (latest version)

##2.Naming(命名) 各種命名に規則について

###2.1 Package Name(パッケージ名) パッケージネームは、すべて lowercase で書き、連続した単語は単純に繋げるようにします。 Package names are all lowercase, with consecutive words simply concatenated together.

// Good
com.example.hogefuga

// Bad
com.example.hogeFuga

com.example.hoge_fuga

###2.2 Class Name(クラス名) クラス名は、 UpperCamelCase で書きます。 Class names are written in UpperCamelCase.

クラス名には、名詞を使用します。 Interfaceや、Open Classにも名詞を使用しますが、場合によっては形容詞を使用します。 Class names are typically nouns or noun phrases. Interface and Open Class names may also be nouns or noun phrases, but may sometimes be adjectives or adjective phrases instead.

アノテーションで特別にルールがある場合は、その命名規則に従います。 There are no specific rules or even well­established conventions for naming annotation types.

TestやActivityやFragmentなど、フレームワークとして大きな意味を持つクラスのサブクラスには、名前の最後にそのスーパークラスの名前を付ける。 Activity classes are name starting the name of the class, and ending Activity.

// Good
Charactor
ImmutableList (this is subclass for list class)
List
Readable
HashText (test class)

// Bad
Move
Is

###2.3 Method Name(メソッド名) メソッド名は、 lowerCamelCase で書きます。 Method names are written in lowerCamelCase.

メソッド名の始めには動詞を使用します。ただし、真偽値を返すメソッドの先頭にはisを使用します。 Method names are typically verbs or verb phrases, but return boolean value method are typically "is" + parameter name.

// Good
stop
clickButton

// Bad
carStop(not stating verb)

###2.4 Companion-Object Constant field(companion objectスコープ内のconstantな変数について) 定数名には、 CONSTANT_CASE (すべて大文字で記述し、単語の区切れ目にアンダーバー'_'を使用したケース)を使用します。 Constant names use CONSTANT_CASE : all uppercase letters, with words separated by underscores.

定数にする値としては以下のようなものです。 But what is a constant, exactly?

クラスのcomapanion objectスコープ内に記述したval変数には、constantシンボルをつけ、これを定数とします。 Every constant is a "companion object constant val field", but not all static final fields are constants.

// Constants
companion object {
	constant val NUMBER: Int = 5
	constant val NAMES: ImmutableList<String> = ImmutableList.of("Ed", "Ann")
}

###2.5 Companion-Object var field(companion objectスコープ内のvar変数について) クラスのcomapanion objectスコープ内に記述したvar変数は、すべて lowerCamelCase を使用します。 Non­constant field names (static or otherwise) are written in lowerCamelCase.

###2.6 Parameter names(引数について) 引数は、 lowerCamelCase で書き、一文字の名前は用いないようにします。 Parameter names are written in lowerCamelCase. One­character parameter names should be avoided.

###2.7 Local variable names(ローカルな変数について) ローカル変数は、 lowerCamelCase で書き、長い名前については柔軟に要約します。 Local variable names are written in lowerCamelCase, and can be abbreviated more liberally than other types of names. ただし、ループ分の中などでの一時的な値を除いて、一文字の名前は避け避けるようにします。 However, one­character names should be avoided, except for temporary and looping variables.

###2.8 Type variable names(タイプ変数について) 型変数の名前には、 1文字か2文字のスタイルを使用します。 Each type variable is named in one of two styles:

  • A single capital letter, optionally followed by a single numeral (such as E , T , X , T2 )
  • A name in the form used for classes, followed by the capital letter T.

##3 Programming Practices(プログラミング記法) Kotlinでコーディングをするときの細かい記法について

###3.1 annotation and modifier(アノテーションや修飾子) メソッドにアノテーションや修飾子をつける際、言語もともとのアノテーションや修飾子はメソッド名と同一の行に書き、サードパーティーのライブラリのアノテーションはライブラリごとに行を分けて記述します。 When write annotation and modifier your function, non annotation modifier written single line, some annotation written multiline.Please write third party annotations multiline sepalating. また、アノテーションや修飾子を列挙する順番については、プロジェクトで統一するようにします。

// Good
@Test    // library 2
@Example // library 1
override private fun actionExample() {
	...
}

// Good
@Someone @Anyone    // library 1 library 1
override private fun actionExample() {
	...
}

// Bad
@Example @Test    // library 1 // library 2
override 
private fun actionExample() {
	...
}

###3.2 single line return value function 値を返す、一行で書けるような関数の場合{}を用いずに=を用いて記述する。また、この際戻り型の値は省略することが可能だが、nullを取るかどうかを明示するため、省略しないようにする。 If single line return value function, using "=".

// Good
fun add(a: Int, b: Int): Int = a + b

// Bad
fun add(a: Int, b:Int): Int {
	return a+b
}

###3.3 when return value(whenの値を返すだけの場合の書き方) whenを用いて値を返す場合、{}を用いずに=を用いて記述する。

// Good
val name: String = when(animal) {
	Cat -> "cat"
	Dog -> "dog"
	else -> null
}

// Bad
val name: String = when(animal) {
	Cat -> {
		"cat"
	}
	Dog -> {
		"dog"
	}
	else -> {
		null
	}
}

###3.4 always used smart cast(スマートキャストの使用) スマートキャストを使用できる時は常に使用し、無駄なキャストを行わない。 ※これらが使用できる場合には、警告がでる

// Good
val cat = "cat"
if(cat is String) {
	println(cat)
}

// Bad
val cat = "cat"
if(cat is String) {
	println(cat as String)
}

###3.5 always used smart (null / nonnull) cast(スマートなNullキャストの使用) スマートオプショナルを使用できる時は常に使用し、オプショナル型において無駄な変換を行わない。

// Good
val cat: String? = null
cat ?: return
println(cat)

// Good
val cat: String? = null
cat?.let {
	println(it)
}

// Bad
val cat: String? = null
cat ?: return
println(cat!!)

###3.6 it always used(代替変数の使用) 特定のスコープ内において変数としてitを使用できる際は、itを使用するようにする。ただし、itが入れ子になり、途中から変数の参照が難しくなるような場合には、変数名を定義して使用することとする。

// Good
val cat: String? = null
cat?.let {
	println(it)
}

// Bad
val cat: String? = null
cat?.let {
	println(cat)
}

###3.7 nonnull members declaration nonnull(nonnullな変数の宣言) Nullが入る可能性のない、またはnullが不正な値である場合はnullableな型にせず。Delegates.notNull()などを使用して、nonnullな型を守る形にする。

###3.8 use SAM(Single Abstract Method) transform(SAM変換の使用) SAM変換は、抽象的なメソッドの使用を簡単に行える便利な機能のため、基本的には使用します。 しかし、継承する必要のあるメソッドが多く存在する際はどのメソッドがどれかわからないため、複数のメソッドが存在する場合は引数の明示を行う。

###3.9 using java field accesser Javaのフィールドにアクセスする際、Kotlinでは、型によってgetとsetを省く形で記述することができるため、できるかぎり使用します。また、Javaのリストの値取得に関してもgetではなく、フィールド名[インデックス値]で取得するようにする。 ※これらが使用できる場合には、警告がでる

##Reference

Clone this wiki locally