Added kotlin guide. (WIP) (15.10.26)

This commit is contained in:
2026-10-15 00:24:21 +03:00
parent dc82207723
commit da3ad9dd1a
13 changed files with 2120 additions and 0 deletions
@@ -0,0 +1,53 @@
---
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)