Перейти к основному содержимому

5.09. Ключевые слова в Kotlin

Разработчику Архитектору

Ключевые слова в Kotlin

Kotlin использует набор зарезервированных слов для построения синтаксических конструкций языка. Все ключевые слова разделены на категории по назначению.

Управляющие конструкции

Ключевое словоЗначениеПример
ifУсловное ветвление с возвратом значенияval max = if (a > b) a else b
whenМногостороннее ветвление, замена switchwhen (x) { 1 -> println("Один"); else -> println("Другое") }
forИтерация по диапазону или коллекцииfor (i in 1..5) println(i)
whileЦикл с предусловиемwhile (x < 10) x++
doЦикл с постусловием (в паре с while)do { read() } while (!eof)
breakПрерывание циклаfor (i in list) { if (i == target) break }
continueПереход к следующей итерации циклаfor (i in 1..10) { if (i % 2 == 0) continue; println(i) }
returnВозврат значения из функции или лямбдыfun sum(a: Int, b: Int): Int = return a + b

Объявление сущностей

Ключевое словоЗначениеПример
classОбъявление классаclass User(val name: String)
interfaceОбъявление интерфейсаinterface Drawable { fun draw() }
objectОбъявление объекта-одиночки или анонимного классаobject Logger { fun log(msg: String) = println(msg) }
funОбъявление функцииfun greet(name: String) = "Привет, $name"
valОбъявление неизменяемой переменной или свойстваval pi = 3.14
varОбъявление изменяемой переменной или свойстваvar counter = 0
typealiasСоздание псевдонима для типаtypealias JsonMap = Map<String, Any>
packageУказание принадлежности к пакетуpackage com.example.app
importИмпорт классов или функций из других пакетовimport java.util.Date

Проверка типов и приведение

Ключевое словоЗначениеПример
isПроверка принадлежности объекта к типуif (obj is String) println(obj.length)
!isОтрицательная проверка типаif (obj !is Number) return
asБезопасное приведение типа с исключением при неудачеval str = obj as String
as?Безопасное приведение типа с возвратом null при неудачеval str = obj as? String

Обработка исключений

Ключевое словоЗначениеПример
tryНачало блока обработки исключенийtry { riskyOperation() } catch (e: Exception) { handle(e) }
catchПерехват исключения определённого типаtry { compute() } catch (e: IOException) { log(e) }
finallyБлок, выполняемый в любом случае после trytry { open() } finally { close() }
throwГенерация исключенияthrow IllegalArgumentException("Неверный аргумент")

Контекстные ссылки

Ключевое словоЗначениеПример
thisСсылка на текущий объект или замыканиеclass Box { fun copy() = this }
superДоступ к членам родительского классаopen class Base { open fun f() {} } class Child : Base() { override fun f() { super.f() } }
itНеявный параметр лямбда-выражения с одним аргументомlist.filter { it > 0 }.map { it * 2 }

Литералы и специальные значения

Ключевое словоЗначениеПример
nullОтсутствие значенияvar name: String? = null
trueЛогическая истинаval isValid = true
falseЛогическая ложьval isEmpty = false

Модификаторы видимости

Ключевое словоЗначениеПример
publicДоступ из любого места (значение по умолчанию)public fun apiMethod() {}
privateДоступ только внутри текущего класса или файлаclass Box { private var hidden = 0 }
protectedДоступ внутри класса и его подклассовopen class Base { protected fun helper() {} }
internalДоступ внутри модуляinternal fun moduleHelper() {}

Модификаторы наследования и переопределения

Ключевое словоЗначениеПример
openРазрешение наследования класса или переопределения членаopen class Parent { open fun f() {} }
overrideЯвное переопределение члена родительского классаclass Child : Parent() { override fun f() {} }
finalЗапрет переопределения (значение по умолчанию для классов)final class Utility { }
abstractОбъявление абстрактного класса или методаabstract class Figure { abstract fun area(): Double }

Специальные модификаторы классов

Ключевое словоЗначениеПример
sealedОграничение иерархии наследования одним файломsealed class Result { class Success : Result(); class Error : Result() }
dataАвтоматическая генерация методов equals, hashCode, toStringdata class User(val id: Int, val name: String)
enumОбъявление перечисленияenum class Color { RED, GREEN, BLUE }
annotationОбъявление аннотацииannotation class JsonField(val name: String)
companionОбъявление companion-объекта внутри классаclass StringUtils { companion object { fun empty() = "" } }
constОбъявление константы времени компиляцииconst val MAX_COUNT = 100

Модификаторы функций

Ключевое словоЗначениеПример
inlineВстраивание тела функции при вызове для оптимизацииinline fun <T> lock(lock: Lock, body: () -> T): T
infixРазрешение вызова функции через инфиксную нотациюinfix fun Int.times(str: String) = str.repeat(this)
operatorПерегрузка операторов языкаoperator fun Point.plus(other: Point) = Point(x + other.x, y + other.y)
suspendОбъявление корутинной функцииsuspend fun fetchData(): String
tailrecОптимизация хвостовой рекурсииtailrec fun gcd(a: Int, b: Int): Int = if (b == 0) a else gcd(b, a % b)
noinlineЗапрет встраивания лямбда-параметра в inline-функцииinline fun foo(f: () -> Unit, noinline g: () -> Unit)
crossinlineЗапрет нелокального возврата из лямбды в inline-функцииinline fun run(block: () -> Unit) { block() }

Модификаторы параметров и свойств

Ключевое словоЗначениеПример
varargРазрешение передачи переменного числа аргументовfun printAll(vararg messages: String) { for (m in messages) println(m) }
reifiedДоступ к реальному типу параметра в inline-функцияхinline fun <reified T> Gson.fromJson(json: String) = fromJson(json, T::class.java)
lateinitОтложенная инициализация свойства без использования nullable-типаlateinit var viewModel: ViewModel
outКовариантность типа в обобщённых классахinterface Producer<out T> { fun produce(): T }
inКонтравариантность типа в обобщённых классахinterface Consumer<in T> { fun consume(value: T) }

Прочие ключевые слова

Ключевое словоЗначениеПример
byДелегирование реализации интерфейса или свойстваclass Delegate { operator fun getValue(...) } val prop by Delegate()
whereУказание множественных ограничений для обобщённых типовfun <T> copyWhenGreater(list: List<T>, threshold: T) where T : Comparable<T>, T : Cloneable
constructorЯвное объявление конструктора классаclass Person(val name: String) { constructor(name: String, age: Int) : this(name) }
initБлок инициализации классаclass User { init { println("Создан экземпляр") } }
getОбъявление пользовательского геттера свойстваval isEmpty get() = size == 0
setОбъявление пользовательского сеттера свойстваvar counter = 0 set(value) { if (value >= 0) field = value }
fieldДоступ к внутреннему полю свойства внутри геттера или сеттераvar name = "" set(value) { field = value.trim() }
actualРеализация ожидаемого объявления в мультиплатформенных проектахactual class Platform { actual fun name() = "JVM" }
expectОбъявление ожидаемого класса или функции для мультиплатформыexpect class Platform { fun name(): String }
externalОбъявление функции, реализованной вне Kotlin (JNI, JS)external fun jsFunction(): dynamic