Keywords and operators
Hard keywords
The following tokens are always interpreted as keywords and cannot be used as identifiers:
-
asis used for type casts.
specifies an alias for an import
as?is used for safe type casts.classdeclares a class.continueproceeds to the next step of the nearest enclosing loop.dobegins a do/while loop (a loop with a postcondition).elsedefines the branch of an if expression that 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.-
inspecifies 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 a 'contains' method.
is used in when expressions for the same purpose.
marks a type parameter as contravariant.
-
!inis used as an operator to check that a value does NOT belong to a range, a collection, or another entity that defines a 'contains' method.
is used in when expressions for the same purpose.
interfacedeclares an interface.-
ischecks that a value has a certain type.
is used in when expressions for the same purpose.
-
!ischecks 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.typealiasdeclares a type alias.typeofis reserved 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 (a loop with a precondition).
Soft keywords
The following tokens act as keywords in the context in which they are applicable, and they 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.-
getdeclares 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.-
setdeclares the setter of a property.
is used as an annotation use-site target.
setparamis used as an annotation use-site target.valuewith theclasskeyword declares an inline class.wherespecifies the constraints for a generic type parameter.
Modifier keywords
The following tokens act as keywords in modifier lists of declarations, and they can be used as identifiers in other contexts:
abstractmarks a class or member as abstract.actualdenotes a platform-specific implementation in multiplatform projects.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 outside of Kotlin (accessible through JNI or in JavaScript).finalforbids overriding a member.infixallows calling a function using infix notation.inlinetells the compiler to inline a function and the lambdas passed to it at the call site.innerallows referring to an 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 they 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 the corresponding infix functions instead).==,!=- 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).?.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...,..<create ranges.:separates a name from a type in a declaration.?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.
For operator precedence, see this reference in Kotlin grammar.
© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/keyword-reference.html