Блокировать функции тела и тела выражения, показывающие различное поведение в Kotlin - PullRequest
0 голосов
/ 07 мая 2020

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

fun compare(a:Int,b:Int):Boolean
{
    val c= a==b
    return c
}

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

fun compare(a: Int, b: Int) = a == b

Причина этого. Я понимаю, что компилятор пытается определить возвращаемые типы, видя тип аргумента, но разве это не применимо к обоим синтаксисам? Почему оба работают по-разному?

1 Ответ

0 голосов
/ 08 мая 2020

Ответ уже есть в документации. Согласно kotlin docs Функции с телом блока всегда должны явно указывать возвращаемые типы, если только это не предназначено для их возврата Unit, и в этом случае это необязательно. Kotlin не выводит типы возвращаемых значений для функций с телами блоков, поскольку такие функции могут иметь сложный поток управления в теле, и тип возвращаемого значения будет неочевиден для читателя (а иногда даже для компилятора).

...