---
title: "Kotlin 2.0 — основные нововведения в синтаксисе"
url: "https://romankryvolapov.com/ru/kotlin-2-key-syntax-changes/"
description: "Что изменилось в синтаксисе Kotlin 2.0: context receivers, value classes, sealed interface, деструктуризация в for и pattern matching в when."
language: ru
updated: 2026-01-21
---
В этой статье опишу основные нововведения в синтаксисте относительно предыдущих версий.

Полный список нововведений можно найти здесь:

[https://kotlinlang.org/docs/whatsnew20.html](https://kotlinlang.org/docs/whatsnew20.html)

## Context Receivers {#Context-Receivers}

```kotlin
// Kotlin 1.x:

class User(
  val name: String
)

fun greet(user: User) {
  with(user) {
    println("Hello, $name")
  }
}

fun main() {
  greet(User("Alice"))
}

// Kotlin 2.0:
// Теперь можно добавлять контексты для функций,
// чтобы явно указывать их зависимости на уровне API:

class User(
  val name: String
)

context(User)

fun greet() {
  println("Hello, $name")
}

fun main() {
  val user = User("Alice")
  with(user) {
    greet()
  }
}
```

## Value classes (переименованные inline-классы) {#Value-classes-переименованные-inline-классы}

Работают аналогично, но новое название лучше отражает их суть, а также предоставлены дополнительные оптимизации при использовании таких классов на JVM

```kotlin
// Kotlin 1.x:

inline class Name(
  val value: String
)


// Kotlin 2.0:

@JvmInline
value class Name(
  val value: String
)
```

## Sealed Interface {#Sealed-Interface}

```kotlin
// Kotlin 1.x:

sealed class Shape {

  class Circle(
    val radius: Double
  ) : Shape()

  class Square(
    val side: Double
  ) : Shape()

}

// Kotlin 2.0:
// теперь можно делать sealed интерфейсы

sealed interface Shape

class Circle(
  val radius: Double
) : Shape

class Square(
  val side: Double
) : Shape
```

## Метки для лямбд и анонимных функций {#Метки-для-лямбд-и-анонимных-функций}

```kotlin
fun process(
  action: () -> Unit
) {
  action()
}

fun main() {
  process {
    return@process println("Лямбда с меткой")
  }
}
```

## Поддержка новых операций с коллекциями {#Поддержка-новых-операций-с-коллекциями}

```kotlin
val list = listOf(1, 2, 3)

val doubled = list.mapNotNull {
  if (it > 1) it * 2
  else null
}
```

## Поддержка нового синтаксиса для сопоставления с образцом в when {#Поддержка-нового-синтаксиса-для-сопоставления-с-образцом-в-when}

```kotlin
sealed class Shape

class Circle(
  val radius: Double
) : Shape()

class Square(
  val side: Double
) : Shape()

fun describeShape(shape: Shape): String = when (shape) {
  is Circle -> "Circle with radius ${shape.radius}"
  is Square -> "Square with side ${shape.side}"
}
```

## Мультиобъявления для классов с operator {#Мультиобъявления-для-классов-с-operator}

```kotlin
data class Person(
  val name: String,
  val age: Int
)

fun main() {
  val (name, age) = Person("Alice", 30)
  println("Name: $name, Age: $age")
}
```

## For loops и улучшения с деструктуризацией {#For-loops-и-улучшения-с-деструктуризацией}

Теперь циклы for могут деструктурировать объекты прямо внутри тела цикла

```kotlin
data class Person(
  val name: String,
  val age: Int
)

fun main() {
  val people = listOf(
    Person("Alice", 30),
    Person("Bob", 25)
  )
  for ((name, age) in people) {
    println("$name is $age years old")
  }
}
```

## Поддержка улучшенных операторов для generics и обобщённых типов {#Поддержка-улучшенных-операторов-для-generics-и-обобщённых-типов}

```kotlin
class Container<T>(val value: T) {
  operator fun plus(other: Container<T>): Container<T> {
    return Container(other.value)
  }
}

fun main() {
  val container1 = Container(10)
  val container2 = Container(20)
  println(container1 + container2)
}
```

[ Copyright: Roman Kryvolapov ](https://t.me/RomanKryvolapov)
