У меня есть следующая функция в Котлине:
fun max(a: Int, b: Int): Int { return if (a > b) a else b }
которые могут быть упрощены:
fun max(a: Int, b: Int) = if (a > b) a else b
в предыдущем определении возвращаемый тип функции был опущен, и это известно как тело выражения . Мне интересно, существуют ли другие случаи, в которых можно опустить возвращаемый тип функции в Котлин.
Функции с блоком блока должны всегда явно указывать типы возвращаемых данных, если только они не предназначены для возврата Unit.
Если функция не возвращает никакого полезного значения, ее тип возврата – Unit
. Unit
– это тип с одним значением – Единица. Это значение не нужно возвращать явно
fun printHello(name: String?): Unit { if (name != null) println("Hello ${name}") else println("Hi there!") // `return Unit` or `return` is optional }
Объявление типа возвращаемого Unit
также является необязательным. Вышеприведенный код эквивалентен
fun printHello(name: String?) { ... }
когда тип возврата – Unit
fun printHello(): Unit { print("hello") }
такой же как
fun printHello() { print("hello") }
также, является тем же самым, что и
fun printHello() = print("hello")
Обычно функция должна объявлять ее возвращаемым типом. Но если некоторые функции состоят из одного выражения, мы можем опустить фигурные скобки и тип возвращаемого значения и использовать символ =
перед выражением, а не ключевое слово return. Этот тип функций называется Single Expression Functions .
Пример:
fun add(a: Int, b: Int): Int { return a + b }
Этот код можно упростить, чтобы:
fun add(a: Int, b: Int) = a + b
Компилятор заставит вас сделать это.