Keywords and Operators
Hard Keywords
The following tokens are always interpreted as keywords and cannot be used as identifiers:
-
as- is used for type casts
- specifies an alias for an import
-
as?is used for safe type casts -
breakterminates the execution of a loop -
classdeclares a class -
continueproceeds to the next step of the nearest enclosing loop -
dobegins a do/while loop (loop with postcondition) -
elsedefines the branch of an if expression which is executed when the condition is false -
falsespecifies the 'false' value of the Boolean type -
forbegins a for loop -
fundeclares a function -
ifbegins an if expression -
in- specifies the object being iterated in a for loop
- is used as an infix operator to check that a value belongs to a range, a collection or another entity that defines the 'contains' method
- is used in when expressions for the same purpose
- marks a type parameter as contravariant
-
!in- is used as an operator to check that a value does NOT belong to a range, a collection or another entity that defines the 'contains' method
- is used in when expressions for the same purpose
-
interfacedeclares an interface -
is- checks that a value has a certain type
- is used in when expressions for the same purpose
-
!is- checks that a value does NOT have a certain type
- is used in when expressions for the same purpose
-
nullis a constant representing an object reference that doesn't point to any object -
objectdeclares a class and its instance at the same time -
packagespecifies the package for the current file -
returnreturns from the nearest enclosing function or anonymous function -
super -
this -
throwthrows an exception -
truespecifies the 'true' value of the Boolean type -
trybegins an exception handling block -
typealiasdeclares a type alias -
typeofreserved for future use -
valdeclares a read-only property or local variable -
vardeclares a mutable property or local variable -
whenbegins a when expression (executes one of the given branches) -
whilebegins a while loop (loop with precondition)
Soft Keywords
The following tokens act as keywords in the context when they are applicable and can be used as identifiers in other contexts:
-
by -
catchbegins a block that handles a specific exception type -
constructordeclares a primary or secondary constructor -
delegateis used as an annotation use-site target -
dynamicreferences a dynamic type in Kotlin/JS code -
fieldis used as an annotation use-site target -
fileis used as an annotation use-site target -
finallybegins a block that is always executed when a try block exits -
get- declares the getter of a property
- is used as an annotation use-site target
-
importimports a declaration from another package into the current file -
initbegins an initializer block -
paramis used as an annotation use-site target -
propertyis used as an annotation use-site target -
receiveris used as an annotation use-site target -
set- declares the setter of a property
- is used as an annotation use-site target
-
setparamis used as an annotation use-site target -
wherespecifies constraints for a generic type parameter
Modifier Keywords
The following tokens act as keywords in modifier lists of declarations and can be used as identifiers in other contexts:
-
actualdenotes a platform-specific implementation in multiplatform projects -
abstractmarks a class or member as abstract -
annotationdeclares an annotation class -
companiondeclares a companion object -
constmarks a property as a compile-time constant -
crossinlineforbids non-local returns in a lambda passed to an inline function -
datainstructs the compiler to generate canonical members for a class -
enumdeclares an enumeration -
expectmarks a declaration as platform-specific, expecting an implementation in platform modules. -
externalmarks a declaration as implemented not in Kotlin (accessible through JNI or in JavaScript) -
finalforbids overriding a member -
infixallows calling a function in infix notation -
inlinetells the compiler to inline the function and the lambdas passed to it at the call site -
innerallows referring to the outer class instance from a nested class -
internalmarks a declaration as visible in the current module -
lateinitallows initializing a non-null property outside of a constructor -
noinlineturns off inlining of a lambda passed to an inline function -
openallows subclassing a class or overriding a member -
operatormarks a function as overloading an operator or implementing a convention -
outmarks a type parameter as covariant -
overridemarks a member as an override of a superclass member -
privatemarks a declaration as visible in the current class or file -
protectedmarks a declaration as visible in the current class and its subclasses -
publicmarks a declaration as visible anywhere -
reifiedmarks a type parameter of an inline function as accessible at runtime -
sealeddeclares a sealed class (a class with restricted subclassing) -
suspendmarks a function or lambda as suspending (usable as a coroutine) -
tailrecmarks a function as tail-recursive (allowing the compiler to replace recursion with iteration) -
varargallows passing a variable number of arguments for a parameter
Special Identifiers
The following identifiers are defined by the compiler in specific contexts and can be used as regular identifiers in other contexts:
-
fieldis used inside a property accessor to refer to the backing field of the property -
itis used inside a lambda to refer to its parameter implicitly
Operators and Special Symbols
Kotlin supports the following operators and special symbols:
-
+,-,*,/,%- mathematical operators-
*is also used to pass an array to a vararg parameter
-
-
=- assignment operator
- is used to specify default values for parameters
-
+=,-=,*=,/=,%=- augmented assignment operators -
++,--- increment and decrement operators -
&&,||,!- logical 'and', 'or', 'not' operators (for bitwise operations, use corresponding infix functions) -
==,!=- equality operators (translated to calls ofequals()for non-primitive types) -
===,!==- referential equality operators -
<,>,<=,>=- comparison operators (translated to calls ofcompareTo()for non-primitive types) -
[,]- indexed access operator (translated to calls ofgetandset) -
!!asserts that an expression is non-null -
?.performs a safe call (calls a method or accesses a property if the receiver is non-null) -
?:takes the right-hand value if the left-hand value is null (the elvis operator) -
::creates a member reference or a class reference -
..creates a range -
:separates a name from a type in declarations -
?marks a type as nullable -
->- separates the parameters and body of a lambda expression
- separates the parameters and return type declaration in a function type
- separates the condition and body of a when expression branch
-
@- introduces an annotation
- introduces or references a loop label
- introduces or references a lambda label
- references a 'this' expression from an outer scope
- references an outer superclass
-
;separates multiple statements on the same line -
$references a variable or expression in a string template -
_- substitutes an unused parameter in a lambda expression
- substitutes an unused parameter in a destructuring declaration
© 2010–2020 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/reference/keyword-reference.html