Функции

Функции

Использование функций состоит из двух частей: 1 – написание кода функции, 2 – вызов функции. Функция если не вызывается его код не выполняется. Для написания функций используется ключевое слово fun затем пишется название функции, которое используется для вызова, затем пишутся скобки () в которых можно писать аргументы для использования в коде функции, затем если функция возвращает значение необходимо написать двоеточие - : и тип данных которое функция возвращает, затем начинается блок кода тела функции, который пишется между {}:
fun sum(a: Int, b: Int): Int {
    return a + b 
}

Также функцию из примера выше можно переписать, так как эта функция только возвращается значение суммы полученных аргументов:

fun sum(a: Int, b: Int) = a + b 

Если функция не возвращает значение можно указать возвращаемый тип как Unit:

fun printSum(a: Int, b: Int): Unit {
    println("sum of $a and $b is ${a + b}") 
} 

или вовсе не указывать Unit:

fun printSum(a: Int, b: Int) {
    println("sum of $a and $b is ${a + b}") 
} 

Приведенные выше функции необходимо вызвать, чтобы их код выполнился. Функция sum возвращает значение и поэтому его значение необходимо либо присвоить переменной, либо использовать другим путём в данном случае результат, возвращаемый функцией sum, выводится в консоль посредством вызова функции println:

println(sum(10,20)) // Результат: 30
printSum(20, 30) // Результат: sum of 20 and 30 is 50
Функции могут иметь значения по умолчанию для параметров, и последующая передача которых уже становится необязательным:
fun addNote(text: String, isProtected : Boolean = false)
{
    println("Add note with text $text and protected state is $isProtected")
}
Параметр isProtected является необязательным для передачи во время вызова и если не передать, его значение по умолчанию равно false:
addNote("Hello")
Но можно также и необязательный параметр передать при вызове функции:
addNote("Good Bye", true)
Необязательный параметр также можно написать перед обязательным параметром:
fun addNote(isProtected : Boolean = false, text: String)
{
    println("Add note with text $text and protected state is $isProtected")
}
и в таком случае при вызове функции необходимо использовать именованные параметры:
addNote(text = "Hello")
addNote(text = "Good Bye", isProtected = true)

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

Функция может принимать переменное количество аргументов, в таком случае перед названием аргумента необходимо добавить ключевое слово vararg. Такой аргумент воспринимается как массив и обычно идёт как последний аргумент функции:

fun task (vararg args : Any)
{
    println("Accepted ${args.size} count of arguments")
}

Например, при вызове функции подобным образом, первый элемент массива равен значению первого аргумента - "Hello", второй значению второго - "Good bye" и размер (size) массива равен 2:

task("Hello", "Good bye")

Если переменное количество аргументов используется не в конце списка аргументов, тогда можно использовать именованные аргументы для передачи значений:

fun task (vararg  args : Any, arg1 : String)
{
    println("Accepted ${args.size} count of arguments")
}

Пример передачи переменного количества аргументов в начале списка параметров функции и затем одной переменной посредством названия параметра:

task("Hello", "Good bye", arg1 = "2")