← Назад к вопросам

Как передаются параметры в функцию в Kotlin

1.0 Junior🔥 192 комментариев
#Kotlin основы#Архитектура и паттерны#Другое

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Передача параметров в функции Kotlin

В Kotlin параметры передаются в функции по значению (by value). Это означает, что для всех типов, включая ссылочные (классы), передается копия ссылки на объект, а не копия самого объекта. Однако поведение зависит от типа параметра и способа его объявления.

Ключевые особенности передачи параметров

Передача по значению для всех типов

  • Для примитивных типов (Int, Double, Boolean) передается копия значения
  • Для ссылочных типов передается копия ссылки на объект
fun modifyPrimitive(value: Int) {
    // 'value' - локальная копия, изменения не затрагивают исходный параметр
    val newValue = value + 10
    println("Внутри функции: $newValue")
}

fun modifyReference(list: MutableList<String>) {
    // 'list' - копия ссылки, изменения объекта через эту ссылку видны извне
    list.add("Modified")
    println("Внутри функции: $list")
}

Именованные параметры (Named Arguments) Kotlin позволяет явно указывать имя параметра при вызове, особенно полезно для функций с множеством параметров или при пропуске некоторых значений.

fun registerUser(name: String, email: String, age: Int = 0) {
    // ...
}

// Вызов с именованными параметрами
registerUser(name = "Иван", email = "ivan@mail.ru")
registerUser(email = "anna@mail.ru", name = "Анна", age = 25)

Параметры с дефолтными значениями (Default Arguments) Функции могут иметь параметры с предустановленными значениями, которые можно не указывать при вызове.

fun sendMessage(text: String, priority: Int = 1, recipient: String = "admin") {
    println("Сообщение '$text' отправлено $recipient с приоритетом $priority")
}

// Можно вызывать с разным количеством аргументов
sendMessage("Привет")
sendMessage("Срочно!", priority = 3)
sendMessage("Внимание!", recipient = "manager", priority = 2)

Переменное количество аргументов (Varargs) С помощью ключевого слова vararg можно передавать переменное количество аргументов одного типа.

fun printAll(vararg messages: String) {
    for (msg in messages) {
        println(msg)
    }
}

printAll("Первое", "Второе", "Третье")
// Также можно передать уже существующий массив с оператором spread (*)
val array = arrayOf("А", "Б", "В")
printAll(*array)

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

Значения по умолчанию и порядок вызова При смешении дефолтных параметров и vararg важно соблюдать порядок: сначала обязательные параметры, затем vararg, затем дефолтные.

// Правильный порядок: обязательный, vararg, дефолтный
fun configure(path: String, vararg options: String, verbose: Boolean = false) {
    // ...
}

Явное указание типа vararg Vararg параметр всегда является массивом указанного типа (Array<T> внутри функции).

Практические рекомендации

При работе с параметрами функций в Kotlin стоит учитывать:

  • Иммутабельные параметры - для предотвращения случайных изменений передаваемых объектов
  • Smart casting - после проверки типа параметра внутри функции Kotlin автоматически преобразует его
  • Передача лямбда-выражений - лямбды передаются как объекты функциональных типов и могут захватывать контекст

Таким образом, Kotlin предоставляет гибкие и безопасные механизмы передачи параметров, сочетающие строгость с удобством использования через именованные аргументы, дефолтные значения и поддержку переменного количества аргументов.