はじめに
その4の続きです。コーディング規約について書きます。
基本的には下記参考
Kotlin スタイルガイド
コーディング規約
名前
ファイル名
大文字から始まるキャメルケースを用いる
1 |
HogeActivity.kt |
クラス名
クラスとオブジェクトの名前は大文字から始まるキャメルケースを用いる
1 2 3 4 5 6 7 8 |
class HogeHoge { } object Piyo { } interface Foo { } |
関数名
小文字から始まるキャメルケースを用いる
1 2 |
fun hogeProcess() { } |
プロパティ名
プロパティ,ローカル変数は小文字から始まるキャメルケースを用いる
定数はアンダースコアで区切った大文字の名前を用いる(アッパースネークケース)
1 2 3 4 |
val hogeValue = "hogehoge" const val HOGE_CODE = 8 val HOGE_VALUE = "hogehoge" |
XML など元々大文字のやつはこんな感じで XmlHttpRequest
になる
列挙型はアッパースネークケース
1 |
enum class HogeType { PIYO_PIYO, FOO } |
スペース
if
, for
, catch
などの予約語の (
の左と )
の右に空白を1つ入れる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// NG for(i in 0..1){ } // OK for (i in 0..1) { } // NG }else{ } // OK } else { } |
バイナリ演算子の両側
1 2 3 4 5 |
// NG val two=1+1 // OK val two = 1 + 1 |
ラムダ式
1 2 3 4 5 |
// NG ints.map{value->value.toString()} // OK ints.map { value -> value.toString() } |
メンバー参照
1 2 3 4 5 |
// NG val toString = Any :: toString // OK(スペース入れない) val toString = Any::toString |
ドット区切り文字
1 2 3 4 5 |
// NG it . toString() // OK(スペース入れない) it.toString() |
範囲演算子 ..
1 2 3 4 5 |
// NG for (i in 1 .. 4) print(i) // OK(スペース入れない) for (i in 1..4) print(i) |
コロン :
後ろは常にスペースを1つ入れる。
以下の場合に前にもスペースを1つ入れる。
- 型とサブタイプを区切るために使うとき
- 親クラスのコンストラクタか,同じクラスの異なるコンストラクタに処理を委譲するとき
- 予約語
object
の後 where
句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// OK abstract class Foo<out T : Any> : IFoo { abstract fun foo(a: Int): T } class FooImpl : Foo() { constructor(x: String) : this(x) { //... } val x = object : IFoo { ... } } // NG fun <T> max(a: T, b: T) where T: Comparable<T> // OK fun <T> max(a: T, b: T) where T : Comparable<T> |
カンマ ,
の後には空白を1つ入れる
1 2 3 4 5 |
// NG val oneAndTwo = listOf(1,2) // OK val oneAndTwo = listOf(1, 2) |
XML
ファイル名
すべて小文字で単語はアンダーバーで区切る(ローワースネークケース)
1 2 3 |
activity_main.xml fragment_main.xml styles_forms.xml |
レイアウトファイル
id
はローワースネークケース。
並び順は android:id
を先頭に android:layout_***
, android:**
の順。style
は最後。
1 2 3 4 5 6 7 8 |
<TextView android:id="@+id/name_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="@string/name" style="@style/FancyText" /> |
参考:futurice/android-best-practices
リントツール
Android Studioには標準のリントツールがあるようで [Analyze] > [Inspect Code] で実行できる。
参考:lint チェックでコードを改善する
細かなルール設定
詳細なルールを設定するにはプロジェクトのルートディレクトリに lint.xml を配置する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?xml version="1.0" encoding="UTF-8"?> <lint> <!-- Disable the given check in this project --> <issue id="IconMissingDensityFolder" severity="ignore" /> <!-- Ignore the ObsoleteLayoutParam issue in the specified files --> <issue id="ObsoleteLayoutParam"> <ignore path="res/layout/activation.xml" /> <ignore path="res/layout-xlarge/activation.xml" /> </issue> <!-- Ignore the UselessLeaf issue in the specified file --> <issue id="UselessLeaf"> <ignore path="res/layout/main.xml" /> </issue> <!-- Change the severity of hardcoded strings to "error" --> <issue id="HardcodedText" severity="error" /> </lint> |
lint
がサポートしている項目については lint --list
コマンドで確認できる。
部分的にルールを無効化する
クラスファイルなどで無効化する場合、@SuppressLint
アノテーションを使う。
1 2 3 4 5 6 7 8 9 10 11 12 |
// この関数のみNewApiルールを無効化 @SuppressLint("NewApi") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) // クラス全体でNewApiルールを無効化 @SuppressLint("NewApi") class Hoge { // これで全部のルール無効 @SuppressLint("all") |
XML で無効化する場合、tools:ignore
属性を使う。
1 2 3 4 5 6 7 8 |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:ignore="UnusedResources" > // 子要素のTextViewでもUnusedResourcesルールを無効化する <TextView android:text="@string/auto_update_prompt" /> </LinearLayout> |
複数のルールを無効化する場合はカンマ区切りにする
1 |
tools:ignore="NewApi,StringFormatInvalid" |
すべてのルールを無効化する場合
1 |
tools:ignore="all" |
さいごに
これで Kotlin については一通り完成!次回からは Android 開発について書いていきます!
コメント
[…] Android Studio 標準の [Analyze] > [Inspect Code] でいいと思います。 使い方詳細は下記 Android Studioには標準のやつ […]