#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), поэтому он просто печатается как имя своего типа, потому что вы могли бы также! В любом случае, как бы оно ни печаталось, вы получаете значение из этого выражения в обоих случаях