Files
obsidian/Kotlin/Синтаксис и типы/Базовый синтаксис/Hello World!.md
T

54 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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<String>) { } // если нужны аргументы командной строки
```
Функция `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)