On this page
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 castsbreakterminates the execution of a loopclassdeclares a classcontinueproceeds to the next step of the nearest enclosing loopdobegins a do/while loop (loop with postcondition)elsedefines the branch of an if expression which is executed when the condition is falsefalsespecifies the 'false' value of the Boolean typeforbegins a for loopfundeclares a functionifbegins an if expressionin- 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 interfaceis- 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 objectobjectdeclares a class and its instance at the same timepackagespecifies the package for the current filereturnreturns from the nearest enclosing function or anonymous functionsuperthisthrowthrows an exceptiontruespecifies the 'true' value of the Boolean typetrybegins an exception handling blocktypealiasdeclares a type aliastypeofreserved for future usevaldeclares a read-only property or local variablevardeclares a mutable property or local variablewhenbegins 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:
bycatchbegins a block that handles a specific exception typeconstructordeclares a primary or secondary constructordelegateis used as an annotation use-site targetdynamicreferences a dynamic type in Kotlin/JS codefieldis used as an annotation use-site targetfileis used as an annotation use-site targetfinallybegins a block that is always executed when a try block exitsget- declares the getter of a property
- is used as an annotation use-site target
importimports a declaration from another package into the current fileinitbegins an initializer blockparamis used as an annotation use-site targetpropertyis used as an annotation use-site targetreceiveris used as an annotation use-site targetset- declares the setter of a property
- is used as an annotation use-site target
setparamis used as an annotation use-site targetwherespecifies 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 projectsabstractmarks a class or member as abstractannotationdeclares an annotation classcompaniondeclares a companion objectconstmarks a property as a compile-time constantcrossinlineforbids non-local returns in a lambda passed to an inline functiondatainstructs the compiler to generate canonical members for a classenumdeclares an enumerationexpectmarks 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 memberinfixallows calling a function in infix notationinlinetells the compiler to inline the function and the lambdas passed to it at the call siteinnerallows referring to the outer class instance from a nested classinternalmarks a declaration as visible in the current modulelateinitallows initializing a non-null property outside of a constructornoinlineturns off inlining of a lambda passed to an inline functionopenallows subclassing a class or overriding a memberoperatormarks a function as overloading an operator or implementing a conventionoutmarks a type parameter as covariantoverridemarks a member as an override of a superclass memberprivatemarks a declaration as visible in the current class or fileprotectedmarks a declaration as visible in the current class and its subclassespublicmarks a declaration as visible anywherereifiedmarks a type parameter of an inline function as accessible at runtimesealeddeclares 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 propertyitis 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