---
title: Функции и лямбды
seo:
  title: Функции и лямбды — Kotlin Developer
  description: Тема «Функции и лямбды» для собеседования Kotlin Developer. Какие существуют функции области видимости (scope functions) в Kotlin? Что такое inline функции?
---

[Все темы Kotlin Developer](/kotlin-developer)

## <strong>Какие существуют функции области видимости</strong> <code>&#40;scope functions&#41;</code> <strong>в Kotlin?</strong> [#q-14bee738d69b8194b656d999d611e2de]

В Kotlin существуют пять функций области видимости&#58;

1. <code>let</code> - позволяет выполнить блок кода над объектом и вернуть
   результат.

1. <code>apply</code> - позволяет выполнять операции над объектом и возвращает
   этот же объект.

1. run как функция-расширение предоставляет объект как this и возвращает результат лямбды. let предоставляет объект как it.

1. <code>with</code> - похожа на <code>run</code>, но вызывается как обычная
   функция, а не расширение.

1. also передаёт объект в лямбду как it и возвращает сам объект. apply также возвращает объект, но предоставляет его как this.

:::note[Ссылки для изучения]

1. [Лямбды в Kotlin](https://kotlinlang.ru/docs/lambdas.html)
   :::

---

## <strong>Что такое</strong> <code>inline</code> <strong>функции?</strong> [#q-14bee738d69b817ea23bef9563e1f719]

Inline-функции в Kotlin представляют собой функции, которые вставляются непосредственно в код вызывающей стороны во время компиляции. Это позволяет избежать накладных расходов на вызов функции и создание дополнительных объектов при передаче лямбда-выражений. Они часто используются для оптимизации производительности кода.

:::note[Ссылки для изучения]

1. [Лямбды в Kotlin](https://kotlinlang.ru/docs/lambdas.html)
   :::

---

## <strong>Опишите, что представляют собой билдеры в Kotlin.</strong> [#q-14bee738d69b81dc8d3ed18a7269d4ab]

Билдеры в Kotlin - это паттерн проектирования, который позволяет создавать объекты с помощью более удобного и гибкого синтаксиса. Они часто используются для создания объектов с большим количеством настраиваемых параметров. Билдеры обычно реализуются с использованием функций-расширений и лямбда-выражений, что делает код более читаемым и выразительным.

:::note[Ссылки для изучения]

1. [Лямбды в Kotlin](https://kotlinlang.ru/docs/lambdas.html)
   :::

---

## <strong>Как объявляются и используются функции в Kotlin?</strong> [#q-14bee738d69b813ab9e9f1c5f8f131ea]

Функции в Kotlin объявляются с использованием ключевого слова <code>fun</code>, за которым следует имя функции, параметры (если есть) и тип возвращаемого значения.

Пример&#58;

```kotlin
fun sum(a: Int, b: Int): Int {
    return a + b
}

fun main() {
    val result = sum(3, 4)
    println(result)  // Выведет 7
}
```

:::note[Ссылки для изучения]

1. [Лямбды в Kotlin](https://kotlinlang.ru/docs/lambdas.html)
   :::

---

## <strong>Объясните, что такое лямбда-выражения и как их использовать.</strong> [#q-14bee738d69b81e7b3e3fca04622f38d]

Лямбда-выражения — это анонимные функции, которые могут быть переданы как аргументы или возвращены из других функций.

Пример&#58;

```kotlin
val sum = { a: Int, b: Int -> a + b }

fun main() {
    val result = sum(3, 4)
    println(result)  // Выведет 7
}
```

:::note[Ссылки для изучения]

1. [Лямбды в Kotlin](https://kotlinlang.ru/docs/lambdas.html)
   :::

---

## <strong>Как работают функции высшего порядка в Kotlin?</strong> [#q-14bee738d69b8175beb8ec0a47dc3f61]

Функции высшего порядка — это функции, которые принимают другие функции в качестве параметров или возвращают их.

Пример&#58;

```kotlin
fun operate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
    return operation(a, b)
}

fun main() {
    val sum = operate(3, 4) { x, y -> x + y }
    println(sum)  // Выведет 7
}
```

:::note[Ссылки для изучения]

1. [Лямбды в Kotlin](https://kotlinlang.ru/docs/lambdas.html)
   :::

---

## Как работают inline и noinline в Kotlin? [#q-14bee738d69b81fbbf7ae45a0fcd3382]

<code>inline</code> функции позволяют компилятору встраивать вызовы этих функций
в места их вызова, что уменьшает накладные расходы на вызов функций.
<code>noinline</code> используется для параметров, которые не должны быть
встроены.

Пример&#58;

```kotlin
inline fun inlineFunction(block: () -> Unit) {
    block()
}

fun main() {
    inlineFunction { println("Inline function") }
}
```

:::note[Ссылки для изучения]

1. [Лямбды в Kotlin](https://kotlinlang.ru/docs/lambdas.html)
   :::
