Ключевые слова и операторы
Жесткие ключевые слова (Hard Keywords)
Следующие слова всегда интерпретируются как ключевые и не могут использоваться в качестве идентификаторов:
as
- используется для [приведения типов](/docs/reference/typecasts.html#unsafe-cast-operator) - задает [альтернативное имя для импорта](/docs/reference/packages.html#imports)
as?
используется для безопасного приведения типов
break
завершает выполнение циклаclass
объявляет классcontinue
переходит к следующему шагу ближайшего вложенного циклаdo
начинает цикл do/while loop (цикл с постусловием)else
определяет ветвь выражения if, которое выполняется, когда условие ложноfalse
указывает значение ‘false’ типа Booleanfor
начинает цикл forfun
объявляет функциюif
начинает условное выражение ifin
- указывает объект, который перебирается в цикле for
- используется как инфиксный оператор для проверки того, что значение принадлежит диапазону, коллекции или другого объекта, который определяет метод ‘contains’
- используется в выражениях when с той же целью
- отмечает параметр типа как контравариантный
!in
- используется в качестве оператора для проверки того, что значение не принадлежит диапазону, коллекции или другой объекта, который определяет метод ‘contains’
- используется в выражениях when с той же целью
interface
объявляет интерфейсis
- проверяет, что значение имеет определенный тип
- используется в выражениях when с той же целью
!is
- проверяет, что значение не имеет определенный тип
- используется в выражениях when с той же целью
null
константа, представляющая ссылку на объект, которая не указывает ни на один объектobject
объявляет класс и его экземпляр одновременноpackage
указывает пакет для текущего файлаreturn
по умолчанию производит возврат из ближайшей окружающей его функции или анонимной функции
super
this
throw
вызывает исключениеtrue
задает значение ‘true’ типа Booleantry
начинает блок обработки исключенийtypealias
объявляет псевдоним типаval
объявляет свойствотолько для чтения или локальную переменнуюvar
объявляет изменяемое свойство или локальную переменнуюwhen
начинает выражение when (выполняет одну из заданных ветвей)while
начинает цикл while (цикл с предусловием)
Мягкие Ключевые Слова (Soft Keywords)
Следующие слова действуют как ключевые в контексте, когда они применимы и могут использоваться как идентификаторы в других контекстах:
by
catch
начинает блок, который обрабатывает определенный тип исключенияconstructor
объявляет первичный или вторичный конструкторdelegate
используется в качестве целевого объекта аннотацииdynamic
ссылается на динамический тип в Kotlin/JS кодеfield
используется в качестве целевого объекта аннотацииfile
используется в качестве целевого объекта аннотацииfinally
начинает блок, который всегда выполняется при выходе из блока tryget
- объявляет геттер свойства
- используется в качестве целевого объекта аннотации
import
импортирует объявление из другого пакета в текущий файлinit
начинает блок инициализацииparam
используется в качестве целевого объекта аннотацииproperty
используется в качестве целевого объекта аннотацииreceiver
используется в качестве целевого объекта аннотацииset
- объявляет сеттер свойства
- используется в качестве целевого объекта аннотации
setparam
используется в качестве целевого объекта аннотацииwhere
задает ограничения для параметра универсального типа
Модификаторы (Modifier Keywords)
Следующие слова действуют как ключевые в списках модификаторов объявлений и могут использоваться как идентификаторы в других контекстах:
actual
означает реализацию Платформы в мультиплатформенных проектахabstract
обозначает класс или элемент как абстрактныйannotation
объявляет класс аннотацииcompanion
объявляет объект-компаньонconst
помечает свойство как константу времени компиляцииcrossinline
запрещает нелокальные возвраты в лямбде, передаваемом встроенной функцииdata
указывает компилятору генерировать канонические элементы для классаenum
объявляет перечислениеexpect
отмечает объявление как платформенное, ожидая реализации в модулях платформы.external
отмечает объявление как реализованное не в Kotlin (доступное через JNI или JavaScript)final
запрещает переопределение элементаinfix
позволяет вызывать функцию в инфиксной записиinline
указывает компилятору встроить функцию и лямбда-выражение на стороне вызоваinner
позволяет ссылаться на экземпляр внешнего класса из вложенного классаinternal
помечает объявление как видимое в текущем модулеlateinit
позволяет инициализировать не-null свойство вне конструктораnoinline
отключает подстановку лямбды, переданной во встроенную функциюopen
позволяет создавать подклассы класса или переопределять элементoperator
обозначает функцию как перегрузку оператора или реализацию соглашенияout
обозначает тип параметра как ковариантныйoverride
помечает элемент как переопределение элемента суперклассаprivate
помечает объявление как видимое в текущем классе или файлеprotected
помечает объявление как видимое в текущем классе и его подклассахpublic
помечает декларацию как видимую в любом местеreified
обозначает параметр типа встроенной функции, как доступная во время выполненияsealed
объявляет изолированный класс (класс с ограниченным подклассом)suspend
обозначает функцию или лямбда как приостанавливаемую (используется как сопрограмма)tailrec
отмечает функцию как с хвостовой рекурсией (позволяя компилятору заменить рекурсию итерацией)vararg
позволяет передавать нефиксированное число аргументов для параметра
Специальные идентификаторы (Special Identifiers)
Следующие идентификаторы определяются компилятором в определенных контекстах и могут использоваться как обычные идентификаторы в других контекстах:
field
используется внутри метода доступа свойства для ссылки на backing field свойстваit
используется внутри лямбды, чтобы косвенно ссылаться на ее параметр
Операторы и специальные символы (Operators and Special Symbols)
Котлин поддерживает следующие операторы и специальные символы:
+
,-
,*
,/
,%
- математические операторы*
также используется для передачи массива в параметр vararg
=
- оператор присваивания
- используется для указания значений по умолчанию для параметров
+=
,-=
,*=
,/=
,%=
- расширенные операторы присваивания++
,--
- операторы инкремента и декремента&&
,||
,!
- логические операторы ‘и’, ‘или’, ‘не’ (для побитовых операций используют соответствующие инфиксные функции)==
,!=
- операторы равенства (переведенные на вызовыequals()
для не-примитивных типов)===
,!==
- операторы ссылочного равенства<
,>
,<=
,>=
- операторы сравнения (переведенные на вызовыcompareTo()
для не-примитивных типов)[
,]
- оператор индексированного доступа (переведенный на вызовыget
иset
)!!
утверждает, что выражение не равно null?.
выполняет безопасный вызов (вызывает метод или обращается к свойству, если получатель не имеет значения null)?:
принимает правое значение, если левое значение равно нулю (Элвис оператор)::
создает ссылку на элемент или ссылку на класс..
создает диапазон:
отделяет имя от типа в объявлениях?
отмечает тип с нулевым значением->
- разделяет параметры и тело лямбда-выражения
- разделяет параметры и тип возвращаемого значения при объявлении лямбды
- разделяет условие и тело ветви выражения when
@
- вводит аннотацию
- вводит или ссылается на метку цикла
- вводит или ссылается на лямбда-метку
- ссылается на выражение ‘this’ из внешней области
- ссылается на внешний суперкласс
;
разделяет несколько операторов на одной строке$
ссылается на переменную или выражение в строковом шаблоне
_
- заменяет неиспользуемый параметр в лямбда выражении
- заменяет неиспользуемый параметр в деструктуризирующем присваивании