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

Повний перелік нововведень можна знайти тут:

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

## 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-класи)

Працюють аналогічно, але нова назва краще відображає їхню суть, а також надано додаткові оптимізації при використанні таких класів на JVM

```kotlin
// Kotlin 1.x:

inline class Name(
  val value: String
)


// Kotlin 2.0:

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

## 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

```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

```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 можуть деструктурувати об'єкти прямо всередині тіла циклу

```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 та узагальнених типів

```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)
