キーワードと演算子
ハードキーワード
以下のトークンは常にキーワードとして解釈され、識別子として使用することはできません。
as- 型キャストに使用されます。
- インポートのエイリアスを指定します。
as?は安全な型キャストに使用されます。breakはループの実行を終了します。classはクラスを宣言します。continueは最も内側のループの次のステップに進みます。doはdo/whileループ(後置条件を持つループ)を開始します。elseは、条件が偽の時に実行されるif式の分岐を定義します。falseはBoolean型の「false」値を指定します。forはforループを開始します。funは関数を宣言します。ifはif式を開始します。in- forループで反復処理されるオブジェクトを指定します。
- 値が範囲やコレクション、または'contains'メソッドを定義しているその他のエンティティに属しているかを確認するための中置演算子として使用されます。
- when式でも同じ目的で使用されます。
- 型パラメータを反変(contravariant)としてマークします。
!in- 値が範囲やコレクション、または'contains'メソッドを定義しているその他のエンティティに属して「いない」ことを確認するための演算子として使用されます。
- when式でも同じ目的で使用されます。
interfaceはインターフェースを宣言します。is- 値が特定の型であるかをチェックします。
- when式でも同じ目的で使用されます。
!is- 値が特定の型ではないことをチェックします。
- when式でも同じ目的で使用されます。
nullは、どのオブジェクトも指していないオブジェクト参照を表す定数です。objectはクラスとそのインスタンスを同時に宣言します。packageは現在のファイルのパッケージを指定します。returnは、最も内側の関数または匿名関数から復帰します。superthisthrowは例外をスローします。trueはBoolean型の「true」値を指定します。tryは例外処理ブロックを開始します。typealiasは型エイリアスを宣言します。typeofは将来の使用のために予約されています。valは読み取り専用のプロパティまたはローカル変数を宣言します。varは可変のプロパティまたはローカル変数を宣言します。whenはwhen式を開始します(与えられた分岐のいずれかを実行します)。whileはwhileループ(前置条件を持つループ)を開始します。
ソフトキーワード
以下のトークンは、適用可能なコンテキストではキーワードとして機能しますが、他のコンテキストでは識別子として使用できます。
bycatchは特定の例外型を処理するブロックを開始します。constructorはプライマリまたはセカンダリコンストラクタを宣言します。delegateはアノテーションの使用箇所ターゲットとして使用されます。dynamicはKotlin/JSコードにおいて動的型(dynamic type)を参照します。fieldはアノテーションの使用箇所ターゲットとして使用されます。fileはアノテーションの使用箇所ターゲットとして使用されます。finallyは、tryブロックを抜ける際に必ず実行されるブロックを開始します。get- プロパティのゲッターを宣言します。
- アノテーションの使用箇所ターゲットとして使用されます。
importは、別のパッケージからの宣言を現在のファイルにインポートします。initは初期化ブロックを開始します。paramはアノテーションの使用箇所ターゲットとして使用されます。propertyはアノテーションの使用箇所ターゲットとして使用されます。receiverはアノテーションの使用箇所ターゲットとして使用されます。set- プロパティのセッターを宣言します。
- アノテーションの使用箇所ターゲットとして使用されます。
setparamはアノテーションの使用箇所ターゲットとして使用されます。valueはclassキーワードとともにインラインクラスを宣言します。whereはジェネリック型パラメータの制約を指定します。
修飾子キーワード
以下のトークンは、宣言の修飾子リストではキーワードとして機能しますが、他のコンテキストでは識別子として使用できます。
abstractは、クラスまたはメンバを抽象(abstract)としてマークします。actualは、マルチプラットフォームプロジェクトにおけるプラットフォーム固有の実装であることを示します。annotationはアノテーションクラスを宣言します。companionはコンパニオンオブジェクトを宣言します。constは、プロパティをコンパイル時定数としてマークします。crossinlineは、インライン関数に渡されたラムダ内での非ローカルリターンを禁止します。dataは、クラスに対して標準的なメンバを生成するようコンパイラに指示します。enumは列挙型(enumeration)を宣言します。expectは宣言をプラットフォーム固有としてマークし、プラットフォームモジュールでの実装を期待します。externalは、Kotlin以外で実装されている宣言(JNI経由またはJavaScript)としてマークします。finalはメンバのオーバーライドを禁止します。infixは、関数を中置記法(infix notation)で呼び出せるようにします。inlineは、関数とそこに渡されたラムダを呼び出し箇所にインライン化するようコンパイラに指示します。innerは、入れ子になったクラス(nested class)から外部クラスのインスタンスを参照できるようにします。internalは、宣言を現在のモジュール内でのみ可視としてマークします。lateinitは、非ヌルプロパティをコンストラクタの外で初期化できるようにします。noinlineは、インライン関数に渡されたラムダのインライン化をオフにします。openは、クラスの継承またはメンバのオーバーライドを可能にします。operatorは、関数が演算子をオーバーロード、またはコンベンションを実装していることを示します。outは型パラメータを共変(covariant)としてマークします。overrideは、メンバがスーパークラスのメンバをオーバーライドしていることを示します。privateは、宣言を現在のクラスまたはファイル内でのみ可視としてマークします。protectedは、宣言を現在のクラスとそのサブクラス内でのみ可視としてマークします。publicは、宣言をどこからでも可視としてマークします。reifiedは、インライン関数の型パラメータに実行時にアクセス可能であるとしてマークします。sealedは封印されたクラス(sealed class)(継承が制限されたクラス)を宣言します。suspendは関数またはラムダを中断可能(コルーチンとして使用可能)としてマークします。tailrecは関数を末尾再帰(tail-recursive)としてマークします(コンパイラが再帰をループに置き換えることを可能にします)。varargは、パラメータに対して可変個の引数を渡すことを可能にします。
特別な識別子
以下の識別子は、特定のコンテキストでコンパイラによって定義されるもので、他のコンテキストでは通常の識別子として使用できます。
fieldは、プロパティアクセサの内部でプロパティのバッキングフィールド(backing field)を参照するために使用されます。itは、ラムダの内部でそのパラメータを暗黙的に参照するために使用されます。
演算子と特殊記号
Kotlinは以下の演算子と特殊記号をサポートしています。
+,-,*,/,%- 数学演算子*は、可変長引数(vararg)パラメータに配列を渡す際にも使用されます。
=- 代入演算子。
- パラメータのデフォルト値を指定するためにも使用されます。
+=,-=,*=,/=,%=- 累算代入演算子。++,--- 増分および減分演算子。&&,||,!- 論理「AND」、「OR」、「NOT」演算子(ビット演算には、対応する中置関数を代わりに使用してください)。==,!=- 等価演算子(非プリミティブ型ではequals()の呼び出しに変換されます)。===,!==- 参照等価演算子。<,>,<=,>=- 比較演算子(非プリミティブ型ではcompareTo()の呼び出しに変換されます)。[,]- インデックスアクセス演算子(getおよびsetの呼び出しに変換されます)。!!は式が非ヌル(non-nullable)であることをアサートします。?.は安全呼び出し(safe call)を実行します(レシーバーが非ヌルの場合にのみメソッドを呼び出すかプロパティにアクセスします)。?:は、左側の値がnullの場合に右側の値をとります(エルビス演算子)。::はメンバ参照またはクラス参照を作成します。..,..<は範囲(range)を作成します。:は宣言において名前と型を分離します。?は型をNull許容(nullable)としてマークします。->@- アノテーションを導入します。
- ループラベルを導入または参照します。
- ラムダラベルを導入または参照します。
- 外部スコープからの 'this' 式を参照します。
- 外部のスーパークラスを参照します。
;は同じ行にある複数の文を分離します。$は文字列テンプレート内で変数または式を参照します。_
演算子の優先順位については、Kotlin文法のこちらのレファレンスを参照してください。
