概要
Kotlin には、事前定義されたキーワード・予約語があり、コンパイラーにとって特別な意味を持ちます。
これらのキーワードを識別子(変数名など)としては利用できない、あるいは識別子としての利用に制限があります。
Kotlin では 以下のタイプのキーワードがあります。
- Hard Keywords (ハードキーワード)
- Soft keywords (ソフトキーワード)
- Modifier keywords (修飾子キーワード)
Hard Keywords
以下は Hard Keywords と呼ばれ、常にキーワードとして解釈するため識別子に使うことはできません。
| キーワード | 説明 | 利用例 |
|---|---|---|
| as | 型キャストを行う | val x = y as String |
| break | ループを終了する | while (true) { if (x == 0) break } |
| class | クラスを宣言する | class MyClass{ } |
| continue | ループの次の反復処理に進む | for (i in 1..10) { if (i % 2 == 0) continue; println(i) } |
| do | do-while ループを開始する | do { x++ } while (x < 10) |
| else | if 式の false の場合の処理を指定する | if (x > 0) println(“positive”) else println(“negative”) |
| false | 真偽値の偽を表す | val isDone = false |
| for | for ループを開始する | for (i in 1..10) println(i) |
| fun | 関数を宣言する | fun add(x: Int, y: Int): Int = x + y |
| if | 条件分岐を行う | if (x > 0) println(“positive”) |
| in | 範囲内にあるか、コレクションに含まれるかをチェックする | if (x in 1..10) println(“in range”) |
| interface | インターフェースを宣言する | interface MyInterface { } |
| is | 型チェックを行う | if (x is String) println(“x is a string”) |
| null | null 参照を表す | val x: String? = null |
| object | オブジェクト宣言を行う | object MyObject { } |
| package | パッケージを宣言する | package com.example |
| return | 関数から値を返す | fun add(x: Int, y: Int): Int { return x + y } |
| super | スーパークラスのメンバーにアクセスする | super.onCreate(savedInstanceState) |
| this | 現在のインスタンスを参照する | this.name = “John” |
| throw | 例外をスローする | throw IllegalArgumentException(“Invalid argument”) |
| true | 真偽値の真を表す | val isDone = true |
| try | 例外処理ブロックを開始する | try { // 例外が発生する可能性のある処理 } catch (e: Exception) { // 例外処理 } |
| typealias | 型エイリアスを宣言する | typealias Name = String |
| val | 読み取り専用のプロパティを宣言する | val name = “John” |
| var | 読み書き可能なプロパティを宣言する | var count = 0 |
| when | when 式を開始する | when (x) { 1 -> println(“one”); else -> println(“other”) } |
| while | while ループを開始する | while (x < 10) { x++ } |
Soft Keywords
以下は Software Keywords と呼ばれ、特定のコンテキストでキーワード(予約語)となります。その特定のコンテキスト外では、識別子として利用することは可能です。
| キーワード | 説明 | 利用例 |
|---|---|---|
| by | 委譲プロパティを宣言する | val name by lazy { “John” } |
| catch | try-catch ブロックの catch 節を宣言する | try { // 例外が発生する可能性のある処理 } catch (e: Exception) { // 例外処理 } |
| constructor | セカンダリコンストラクタを宣言する | class MyClass constructor(name: String) |
| delegate | 委譲パターンを実装する | delegate.doSomething() |
| dynamic | 動的型付けを有効にする(主に JavaScript との相互運用で使用) | dynamic x = “Hello” |
| field | プロパティのバッキングフィールドにアクセスする | var count = 0; set(value) { field = value } |
| file | ファイルクラスを表す(アノテーションで使用) | @file:JvmName(“Utils”) |
| finally | try-catch-finally ブロックの finally 節を宣言する | try { // 例外が発生する可能性のある処理 } finally { // 後処理 } |
| get | プロパティのゲッターを定義する | val name: String get() = “John” |
| import | 別のパッケージからクラスや関数をインポートする | import com.example.MyClass |
| init | 初期化ブロックを定義する | class MyClass { init { println(“Initialized”) } } |
| param | 関数のパラメータを表す(アノテーションで使用) | @param name パラメータの説明 |
| property | プロパティを表す(アノテーションで使用) | @property name プロパティの説明 |
| receiver | 拡張関数またはプロパティのレシーバーを表す(アノテーションで使用) | @receiver レシーバーの説明 |
| set | プロパティのセッターを定義する | var count = 0; set(value) { field = value } |
| setparam | セッターパラメータを表す(アノテーションで使用) | @setparam value セッターパラメータの説明 |
| where | 型パラメータの制約を指定する | fun <T> myFunction(x: T) where T : Number |
Modifier Keywords
以下は Modifier Keywords です。クラス、関数、プロパティなどの宣言を変更するために使用されます。それ以外のコンテキストでは識別子として利用可能です。
| キーワード | 説明 | 利用例 |
|---|---|---|
| abstract | 抽象クラスまたは関数を宣言する | abstract class MyAbstractClass { } |
| actual | 共通コードのプラットフォーム固有の実装を宣言する | actual fun platformName(): String = “Android” |
| annotation | アノテーションクラスを宣言する | annotation class MyAnnotation |
| companion | コンパニオンオブジェクトを宣言する | companion object { } |
| const | コンパイル時定数を宣言する | const val PI = 3.14 |
| crossinline | インライン関数の非ローカルリターンを禁止する | inline fun myFunction(crossinline block: () -> Unit) |
| data | データクラスを宣言する | data class Person(val name: String, val age: Int) |
| enum | 列挙型を宣言する | enum class Color { RED, GREEN, BLUE } |
| expect | 共通コードのプラットフォーム固有の実装を期待する | expect fun platformName(): String |
| external | 外部で定義された関数を宣言する | external fun myExternalFunction() |
| final | クラスまたは関数のオーバーライドを禁止する | final class MyClass { } |
| infix | 中置記法で呼び出せる関数を宣言する | infix fun Int.plus(other: Int): Int = this + other |
| inline | インライン関数を宣言する | inline fun myFunction(block: () -> Unit) |
| inner | 内部クラスを宣言する | inner class InnerClass { } |
| internal | モジュール内でのみアクセス可能な宣言を行う | internal val myInternalProperty = 0 |
| lateinit | 後で初期化されるプロパティを宣言する | lateinit var myLateinitProperty: String |
| noinline | インライン関数の特定のラムダ式をインライン化しない | inline fun myFunction(noinline block: () -> Unit) |
| open | クラスまたは関数のオーバーライドを許可する | open class MyClass { } |
| operator | 演算子オーバーロードを定義する | operator fun plus(other: MyClass): MyClass = … |
| out | 共変型パラメータを宣言する | interface Producer<out T> { fun produce(): T } |
| override | スーパークラスのメンバーをオーバーライドする | override fun toString(): String = … |
| private | クラス内でのみアクセス可能な宣言を行う | private val myPrivateProperty = 0 |
| protected | クラスとそのサブクラス内でのみアクセス可能な宣言を行う | protected val myProtectedProperty = 0 |
| public | どこからでもアクセス可能な宣言を行う | public val myPublicProperty = 0 |
| reified | インライン関数内で型パラメータの実際の型にアクセスする | inline fun <reified T> myFunction() |
| sealed | 制限されたクラス階層を宣言する | sealed class MySealedClass |
| suspend | 中断関数を宣言する | suspend fun mySuspendFunction() |
| tailrec | 末尾再帰関数を宣言する | tailrec fun factorial(n: Int, acc: Int = 1): Int = … |
| vararg | 可変長引数を宣言する | fun myFunction(vararg args: Int) |
公式サイトの情報
公式サイトでの情報は以下です。
https://kotlinlang.org/docs/keyword-reference.html