В Kotlin почти все является выражением и имеет значение

#kotlin #output #return-value

#kotlin #вывод #возвращаемое значение

Вопрос:

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

Для меня совершенно ясно, на теоретическом уровне, что в Kotlin почти все имеет значение. На практическом уровне это не так, и я нашел этот случай.

С помощью этого кода:

 val isUnit = println("This is an expression")
println(isUnit)
  

мой вывод

 This is an expression
kotlin.Unit
  

поэтому сначала он печатает значение isUnit , а затем его тип.

Но если я это делаю

 val isUnit = 10
println(isUnit)
  

вывод будет

 10
  

Почему в этом случае вывод не

 10
kotlin.Int
  

?

Комментарии:

1. в этом примере: val isUnit = 10 println(isUnit) ‘isUnit’ равен всего 10, что в первом примере isUnit равно функциональной единице для того же результата, который вы должны написать val isUnit = println(10) println(isUnit)

2. This is an expression это не «значение» isUnit val, а результат первого println

Ответ №1:

Определяется Unit.toString как:

 public object Unit {
    override fun toString() = "kotlin.Unit"
}
  

И println изменяет тип Int на String.valueOf(i) в конце. И он возвращает строковое представление значения Int .

Вы можете напечатать имя класса, используя KClass.qualifiedName:

 val isUnit = 10
println(isUnit)
println(isUnit::class.qualifiedName)
  

С принтами:

 10
kotlin.Int
  

Комментарии:

1. Да, это так — Int печатается как его значение, потому что это обычно то, что вы хотите видеть. Unit это просто специальный объект «без значения» (похожий void на Java), поэтому он просто печатается как имя своего типа, потому что вы могли бы также! В любом случае, как бы оно ни печаталось, вы получаете значение из этого выражения в обоих случаях