Передача параметров в функции
Рассмотрим передачу неопределенного количества параметров в Kotlin-функции. Создадим функцию printSam, изначально принимающую один параметр типа String:
fun printSam(word: String) {
println(word)
}
printSam("sam") // Выведет "sam"
Для передачи неопределенного количества параметров перед параметром используется ключевое слово vararg:
fun printSam(vararg word: String) {
for (item in word) {
print(item + " ")
}
println()
}
printSam("sam")
printSam("sam", "hello")
printSam("hello", "sam", "new")
vararg позволяет вызывать функцию без параметров, с одним или несколькими. Если параметры отсутствуют, переменная word будет пустой. В примере word обрабатывается в цикле, что делает функцию универсальной. Вывод:
- printSam("sam"): sam
- printSam("sam", "hello"): sam hello
- printSam("hello", "sam", "new"): hello sam new
Для вывода параметров в одну строку используем joinToString:
fun printSam(vararg word: String) {
println(word.joinToString(" "))
}
Можно передавать дополнительные параметры с указанием типа:
fun printSam(item: Int, vararg word: String) {
print("$item ")
for (w in word) {
print("$w ")
}
println()
}
printSam(1, "sam")
printSam(2, "sam", "hello")
item всегда будет первым параметром, остальные — через vararg. Вывод:
- printSam(1,"sam"): 1 sam
- printSam(2,"sam","hello"): 2 sam hello
Передача массива в функцию
vararg часто используется для передачи массива данных. Создадим массив:
val names = arrayOf("bog", "john", "alex")
И передадим его в функцию:
fun printSam(vararg word: Any) { // Any — для разных типов данных
print("hi ")
for (w in word) {
print("$w ")
}
println()
}
printSam(*names) // Используем * для распаковки массива
* распаковывает массив names. Функция корректно обрабатывает массив разных типов данных:
printSam(*arrayOf("bog", "john", "alex", 1, true)) // выведет "hi bog john alex 1 true "
Можно явно указывать параметры:
fun printSam(word: String, item: Int){
println("$item $word")
}
printSam(item = 1, word = "sam") // выведет "1 sam"
Параметры с явным указанием можно менять местами.
Значения по умолчанию
Для параметров можно устанавливать значения по умолчанию с помощью знака равенства:
fun printSam(item: String = "hi", vararg word: String) {
print("$item ")
for (w in word) {
print("$w ")
}
println()
}
printSam() // выведет "hi "
printSam("hello","world") // выведет "hello world "
Если параметр item не передан, используется значение по умолчанию «hi».
Циклы в Kotlin
В Kotlin доступны различные циклы:
- forEach: Рассматривался ранее.
- while: Выполняется, пока условие истинно:
var items = 5
while (items > 0) {
println(items)
items--
}
- do while: Выполняет тело цикла один раз, затем проверяет условие:
var items = 5
do {
println(items)
items--
} while (items > 0)
- for: Более гибкий, чем в Java. Можно перебирать диапазон чисел:
for (i in 0..3) { // Диапазон от 0 до 3 включительно
println(i)
}
for (i in 1..10 step 2) { // от 1 до 10 с шагом 2
println(i)
}
for (i in 10 downTo 0 step 2){ //обратный цикл от 10 до 0 с шагом 2
println(i)
}
Можно перебирать символы:
for (c in 'a'..'d') {
println(c)
}
for (c in 'z' downTo 'a' step 5){
println(c)
}
Использование диапазонов в условных операторах:
val x = 20
if (x in 5..30) {
println(x)
}
Рассмотрено использование vararg для передачи неопределенного количества параметров в функции, а также различные типы циклов в Kotlin: while, do while и for с их вариациями. Kotlin предоставляет гибкие инструменты для работы с параметрами и циклами.