На этом шаге мы дадим небольшой сравнительный анализ определения функций в Kotlin и Java.
Все функции, которые вы писали до этого момента, объявлялись на уровне файла Game.kt. Если вы - разработчик Java, это может вас удивить. В Java функции и переменные могут быть объявлены только внутри классов. Это правило не относится к Kotlin.
Возможно ли такое, чтобы код языка Kotlin компилировался в байт-код Java для запуска на JVM? Разве Kotlin не должен придерживаться тех же правил? Если посмотреть на скомпилированный байт-код Java для Game.kt, то все станет ясно:
Рис.1. Скомпилированный байт-код Java для Game.kt
Функции уровня файла представлены в Java как статические методы класса с именем, совпадающим с именем файла в Kotlin. (Методы в Java - это то же самое, что и функции.) В этом случае функции и переменные, объявленные в Game.kt, объявляются в Java в классе с именем GameKt.
Мы узнаем позже, как объявить функции в классах, но возможность объявить функции и переменные вне классов дает свободу выбора при создании функций, которые не привязаны к классу.
На следующем шаге мы рассмотрим перегрузку функций.