--- title: Hello World! description: Первая программа на Kotlin, функция main и запуск через kotlinc tags: - kotlin - syntax --- ```kotlin fun main() { println("Hello World") } ``` Файл `Hello.kt`. Имя файла **не связано** с содержимым - можно назвать как угодно. - `fun` - объявление функции - `main` - точка входа, может быть без параметров - `println` - функция из стандартной библиотеки, не метод класса - Точки с запятой не нужны ## Точка входа Два допустимых варианта: ```kotlin fun main() { } // обычно используют этот fun main(args: Array) { } // если нужны аргументы командной строки ``` Функция `main` должна быть на верхнем уровне файла (top-level), внутри класса её быть не может. ## Запуск ```bash kotlinc Hello.kt -include-runtime -d hello.jar java -jar hello.jar ``` Или через скриптовый режим, без создания jar: ```bash kotlin Hello.kt ``` Подробнее: [kotlinc](../../Инструментарий/kotlinc.md) > [!info] Отличия от Java > В Java `main` обязан лежать внутри класса, быть `public static void` и принимать `String[]`, а имя файла должно совпадать с именем публичного класса ([Hello World! в Java](../../../Программирование%20на%20Java/Синтаксис%20и%20типы/Базовый%20синтаксис/Hello%20World!.md)). > В Kotlin всё это не требуется: функции живут прямо в файле. > > На уровне байт-кода класс всё равно появляется - компилятор создаёт `HelloKt` с методом `public static void main(String[])`. Поэтому JVM запускает Kotlin-код без каких-либо адаптеров. > Подробнее: [Kotlin в байт-коде](../../Взаимодействие%20с%20Java/Kotlin%20в%20байт-коде.md) > [!warning] Подводные камни > - `fun Main()` или `fun start()` скомпилируется, но JVM точку входа не найдёт - имя строго `main` > - Если в файле есть `package`, запускать надо с полным именем: `java -cp . com.example.HelloKt` > - Две функции `main()` в одном пакете в разных файлах - это нормально, классы-обёртки будут разными (`HelloKt`, `AppKt`) Далее: [Типы данных](Типы%20данных.md)