Kotlin в IntelliJ IDEA Kotlin змінні Kotlin типи даних Kotlin операції з числами Kotlin умовні вирази Kotlin умовні конструкції Kotlin цикли Kotlin послідовності Kotlin масиви Kotlin функціональне програмування Kotlin змінна кількість параметрів. Vararg Kotlin повернення результату. оператор return Kotlin однорядкові і локальні функції Kotlin перевантаження функцій Kotlin Лямбда-вирази Kotlin функції вищого порядку Kotlin Анонімні функції Kotlin ООП Класи і об'єкти Kotlin ООП властивості Kotlin ООП конструктор Kotlin ООП функції в класах Kotlin ООП Пакети та імпорт Kotlin ООП модифікатори видимості Kotlin ООП вкладені класи Kotlin ООП інтерфейси Kotlin ООП спадкування Kotlin ООП Перевизначення методів і властивостей Kotlin ООП Абстрактні класи та методи Kotlin ООП Data-класи Kotlin ООП перерахування enums Kotlin ООП Null і nullable-типи Kotlin ООП Обробка винятків Kotlin ООП перетворення типів Kotlin ООП Інфіксна функція Kotlin ООП функції розширення Kotlin ООП Узагальнені класи і функції Kotlin ООП обмеження узагальнень Kotlin ООП Варіантність, коваріантність і контраваріантність Kotlin Колекції. Змінювані і незмінні колекції Kotlin Колекції. LIST список Kotlin Колекції. Set Kotlin Колекції. Map

Kotlin змінна кількість параметрів. Vararg


Функція може приймати змінна кількість параметрів одного типу. Для визначення таких параметрів застосовується ключове слово vararg . Наприклад, нам необхідно передати в функцію кілька рядків, але скільки саме рядків, ми точно не знаємо. Їх може бути п'ять, шість, сім і т.д .:

fun printStrings(vararg strings: String){
    for(str in strings)
        println(str)
}
fun main(args: Array<String>) {
 
    printStrings("Tom", "Bob", "Sam")
    printStrings("Kotlin", "JavaScript", "Java", "C#", "C++")
}

Функція printStrings приймає невизначену кількість рядків. У самій функції ми можемо працювати з параметром як з послідовністю рядків, наприклад, перебирати елементи послідовності в циклі і проводити з ними деякі дії.

При виконанні функції ми можемо їй передати будь-яку кількість рядків.

Інший приклад - підрахунок суми невизначеної кількості чисел:

fun sum(vararg numbers: Int){
    var result=0
    for(n in numbers)
        result += n
    println("Сумма чисел равна $result")
}
fun main(args: Array<String>) {
 
    sum(1, 2, 3, 4, 5)
    sum(1, 2, 3, 4, 5, 6, 7, 8, 9)
}

Якщо функція приймає кілька параметрів, то зазвичай vararg-параметр є останнім.

fun printUserGroup(count:Int, vararg users: String){
    println("Count: $count")
    for(user in users)
        println(user)
}
 
fun main(args: Array<String>) {
 
    printUserGroup(3, "Tom", "Bob", "Alice")
}

Однак це не обов'язково, але якщо після vararg-параметра йдуть ще якісь параметри, то при виконанні функції значення цих параметрів передаються через іменовані аргументи:

fun printUserGroup(group: String, vararg users: String, count:Int){
    println("Group: $group")
    println("Count: $count")
    for(user in users)
        println(user)
}
fun main(args: Array<String>) {
 
    printUserGroup("KT-091", "Tom", "Bob", "Alice", count=3)
}

Тут функція printUserGroup приймає три параметри. Значення параметрів до vararg-параметра передаються по позиціях. Тобто в даному випадку "KT-091" буде представляти значення для параметра group. Наступні значення інтерпретуються як значення для vararg-параметра аж до іменнованних аргументів.


оператор *

Оператор * (spread operator) (не варто плутати зі знаком множення) дозволяє передати параметру як значення елементи з масиву:

fun printUserGroup(group: String, vararg users: String, count:Int){
    println("Count: $count")
    for(user in users)
        println(user)
}
fun main(args: Array<String>) {
 
    val users = arrayOf("Tom", "Bob", "Alice")
    printUserGroup("MO-011", *users, count=3)
}

Зверніть увагу на зірочку перед users при виконанні функції: . Без застосування даного оператора ми зіткнулися б з помилкою, оскільки параметри функції представляють не масив, а невизначену кількість рядків. printUserGroup("MO-011", *users , count=3)


Наш партнер:
beta test mp3 playlist downloader