Ключевые слова и операторы
Жесткие ключевые слова (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по умолчанию производит возврат из ближайшей окружающей его функции или анонимной функции
superthisthrowвызывает исключениеtrueзадает значение ‘true’ типа Booleantryначинает блок обработки исключенийtypealiasобъявляет псевдоним типаvalобъявляет свойствотолько для чтения или локальную переменнуюvarобъявляет изменяемое свойство или локальную переменнуюwhenначинает выражение when (выполняет одну из заданных ветвей)whileначинает цикл while (цикл с предусловием)
Мягкие Ключевые Слова (Soft Keywords)
Следующие слова действуют как ключевые в контексте, когда они применимы и могут использоваться как идентификаторы в других контекстах:
bycatchначинает блок, который обрабатывает определенный тип исключения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’ из внешней области
- ссылается на внешний суперкласс
;разделяет несколько операторов на одной строке$ссылается на переменную или выражение в строковом шаблоне
_- заменяет неиспользуемый параметр в лямбда выражении
- заменяет неиспользуемый параметр в деструктуризирующем присваивании