キーワードと演算子
ハードキーワード
以下のトークンは常にキーワードとして解釈され、識別子として使用することはできません:
asas?はセーフキャストに使用されます。breakはループの実行を終了します。classはクラスを宣言します。continueは直近の囲っているループの次のステップに進みます。doは do/while ループ(後置条件付きループ)を開始します。elseは、条件が偽(false)の場合に実行される if 式の分岐を定義します。falseは Boolean 型の「偽」の値を指定します。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 型の「真」の値を指定します。tryは例外処理ブロックを開始します。typealiasは型エイリアスを宣言します。typeofは将来の使用のために予約されています。valは読み取り専用のプロパティまたはローカル変数を宣言します。varは可変なプロパティまたはローカル変数を宣言します。whenは when 式を開始します(指定された分岐のいずれかを実行します)。whileは while ループ(前置条件付きループ)を開始します。
ソフトキーワード
以下のトークンは、適用可能なコンテキストではキーワードとして機能しますが、それ以外のコンテキストでは識別子として使用できます:
bycatchは特定の例外型を処理するブロックを開始します。constructorはプライマリまたはセカンダリコンストラクタを宣言します。delegateはアノテーションの使用箇所ターゲット(use-site target)として使用されます。dynamicは Kotlin/JS コードにおいて dynamic 型を参照します。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はネストしたクラスから外部クラスのインスタンスを参照できるようにします。internalは宣言が現在のモジュール内でのみ見えるようにマークします。lateinitはコンストラクタ以外での非 null プロパティの初期化を許可します。noinlineはインライン関数に渡されるラムダのインライン展開をオフにします。openはクラスの継承またはメンバのオーバーライドを許可します。operatorは関数が演算子をオーバーロード、または規約(convention)を実装しているものとしてマークします。outは型パラメータを共変(covariant)としてマークします。overrideはメンバがスーパークラスのメンバをオーバーライドしていることを示します。privateは宣言を現在のクラスまたはファイル内でのみ見えるようにマークします。protectedは宣言を現在のクラスとそのサブクラス内でのみ見えるようにマークします。publicは宣言がどこからでも見えるようにマークします。reifiedはインライン関数の型パラメータに実行時にアクセス可能であるようにマークします。sealedは封印された(sealed)クラス(継承が制限されたクラス)を宣言します。suspendは関数またはラムダを中断可能(suspending)としてマークします(コルーチンとして使用可能)。tailrecは関数を末尾再帰(tail-recursive)としてマークします(コンパイラが再帰を反復に置き換えることを許可します)。varargはパラメータに対して可変個の引数を渡すことを許可します。
特殊な識別子
以下の識別子は特定のコンテキストでコンパイラによって定義され、それ以外のコンテキストでは通常の識別子として使用できます:
fieldはプロパティアクセサ内で、そのプロパティのバッキングフィールドを参照するために使用されます。itはラムダ内で、そのパラメータを暗黙的に参照するために使用されます。
演算子と特殊記号
Kotlin は以下の演算子と特殊記号をサポートしています:
+,-,*,/,%- 数学演算子*は配列を vararg パラメータに渡すためにも使用されます。
=- 代入演算子。
- パラメータのデフォルト値を指定するために使用されます。
+=,-=,*=,/=,%=- 代入演算子の拡張(augmented assignment operators)。++,--- インクリメントおよびデクリメント演算子。&&,||,!- 論理 'and', 'or', 'not' 演算子(ビット演算には、対応する中置関数を代わりに使用してください)。==,!=- 等価性演算子(非プリミティブ型の場合、equals()の呼び出しに変換されます)。===,!==- 参照等価性演算子。<,>,<=,>=- 比較演算子(非プリミティブ型の場合、compareTo()の呼び出しに変換されます)。[,]- インデックスアクセス演算子(getおよびsetの呼び出しに変換されます)。!!は式が非 null であることをアサートします。?.はセーフコールを実行します(レシーバが非 null の場合にメソッドを呼び出すか、プロパティにアクセスします)。?:は左側の値が null の場合に右側の値をとります(エルビス演算子)。::はメンバ参照またはクラス参照を作成します。...,..<は範囲を作成します。:は宣言において名前と型を区切ります。?は型をnullable(ヌル許容)としてマークします。->@- アノテーションを導入します。
- ループラベルを導入または参照します。
- ラムダラベルを導入または参照します。
- 外部スコープからの 'this' 式を参照します。
- 外部のスーパークラスを参照します。
;は同一ライン上の複数の文を区切ります。$は文字列テンプレート内で変数または式を参照します。_
演算子の優先順位については、Kotlin 文法のこちらのレファレンスを参照してください。
