Added kotlin guide. (WIP) (15.10.26)
This commit is contained in:
@@ -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)
|
||||
Reference in New Issue
Block a user