🎯 Kotlin

Introduction à Kotlin : historique, caractéristiques, application en Kotlin

Что это и зачем?

Представь, что ты учишься готовить. Сначала ты можешь просто смешивать продукты (как в Python — всё просто и понятно). Но когда ты захочешь приготовить сложное блюдо для ресторана, тебе понадобятся специальные инструменты: точные весы, таймер, хорошие ножи. Kotlin — это такой «профессиональный набор инструментов» для программирования. Он создан, чтобы писать большие и сложные программы, но при этом не запутаться в коде.

Kotlin придумала компания JetBrains в 2011 году. Эти ребята создают инструменты для программистов, поэтому они знают, чего нам не хватает. Kotlin работает везде, где есть Java (а это миллиарды устройств!), но пишется проще и понятнее. Его используют для создания приложений на Android, веб-сайтов, игр и даже программ для серверов.

Почему это важно? Представь, что ты строишь дом из конструктора LEGO. Python — это когда у тебя есть только базовые кубики. Kotlin — это когда у тебя есть специальные детали для окон, дверей и крыши. Ты можешь построить дом быстрее и он будет крепче. Если хочешь создавать настоящие приложения для телефонов или работать в IT-компании — Kotlin отличный выбор.

Синтаксис и примеры кода

Давай посмотрим, как выглядит код на Kotlin. Не пугайся — всё логично!

Пример 1: Привет, мир!

// Это комментарий — компьютер его игнорирует
fun main() {
    // println — команда "напечатай строку"
    println("Привет, мир!")
    // Вывод: Привет, мир!
}

Объяснение: fun main() — это главная функция, с которой начинается любая программа. Внутри фигурных скобок {} пишем команды. println выводит текст на экран. Точка с запятой в конце не нужна (в отличие от Java).

Пример 2: Переменные и типы данных

fun main() {
    // val — неизменяемая переменная (как константа)
    val имя: String = "Анна"
    // var — изменяемая переменная
    var возраст: Int = 12
    
    println("Меня зовут $имя") // Вывод: Меня зовут Анна
    println("Мне $возраст лет") // Вывод: Мне 12 лет
    
    возраст = 13 // Можно изменить, потому что var
    // имя = "Оля" — Ошибка! val нельзя менять
}

Объяснение: val и var — это ключевые слова для создания переменных. После двоеточия пишем тип: String (текст), Int (целое число). Знак доллара $ вставляет значение переменной прямо в текст. Это удобнее, чем склеивать строки.

Пример 3: Условный оператор if

fun main() {
    val оценка = 85
    
    if (оценка >= 90) {
        println("Отлично!")
    } else if (оценка >= 75) {
        println("Хорошо")
    } else {
        println("Нужно подтянуть")
    }
    // Вывод: Хорошо
    
    // Можно записать короче (как выражение):
    val результат = if (оценка >= 90) "Отлично" else "Нормально"
    println(результат) // Вывод: Нормально
}

Объяснение: if проверяет условие в скобках. Если оно истинно — выполняется первый блок, иначе — следующий. В Kotlin if может возвращать значение (как в последнем примере). Это удобно — не нужно писать отдельную переменную.

Пример 4: Цикл for

fun main() {
    // Цикл по диапазону чисел от 1 до 5
    for (i in 1..5) {
        println("Счёт: $i")
    }
    // Вывод:
    // Счёт: 1
    // Счёт: 2
    // Счёт: 3
    // Счёт: 4
    // Счёт: 5
    
    // Цикл по списку
    val фрукты = listOf("яблоко", "банан", "апельсин")
    for (фрукт in фрукты) {
        println("Я люблю $фрукт")
    }
    // Вывод:
    // Я люблю яблоко
    // Я люблю банан
    // Я люблю апельсин
}

Объяснение: for повторяет действия для каждого элемента. 1..5 — это диапазон чисел. listOf создаёт список. Переменная i (или фрукт) по очереди принимает значения из диапазона или списка.

Пример 5: Функции

// Функция, которая складывает два числа
fun сложить(a: Int, b: Int): Int {
    return a + b
}

// Функция с короткой записью
fun умножить(a: Int, b: Int) = a * b

fun main() {
    val сумма = сложить(5, 3)
    println("5 + 3 = $сумма") // Вывод: 5 + 3 = 8
    
    val произведение = умножить(4, 2)
    println("4 * 2 = $произведение") // Вывод: 4 * 2 = 8
}

Объяснение: Функции — это маленькие «кирпичики» программы. fun создаёт функцию. В скобках — параметры (входные данные). После двоеточия — тип результата. return возвращает значение. Если функция короткая, можно использовать = вместо фигурных скобок.

Сравнение с Python

Python — отличный язык для начала. Но давай посмотрим, чем Kotlin отличается:

Идея Python Kotlin
Вывод текста print("Привет") println("Привет")
Переменная (неизменяемая) имя = "Анна" (все переменные можно менять) val имя = "Анна" (нельзя изменить)
Переменная (изменяемая) возраст = 12 var возраст = 12
Тип данных Определяется автоматически, можно менять Строгий: val имя: String = "Анна"
Условие if if оценка >= 90: print("Отлично") if (оценка >= 90) { println("Отлично") }
Цикл for for i in range(5): print(i) for (i in 1..5) { println(i) }
Функция def сложить(a, b): return a + b fun сложить(a: Int, b: Int): Int { return a + b }
Вставка в строку f"Меня зовут {имя}" "Меня зовут $имя"

Главные отличия:

  • Типы данных: В Python ты можешь написать x = 5, а потом x = "текст". В Kotlin так нельзя — тип фиксируется раз и навсегда. Это защищает от ошибок.
  • Фигурные скобки: В Python важны отступы (пробелы). В Kotlin используются {} — ты всегда видишь, где начинается и заканчивается блок.
  • Безопасность: Kotlin не даст тебе использовать переменную, которая может быть null (пустой). В Python таких проверок нет.
  • Скорость: Kotlin работает быстрее Python, потому что компилируется в байт-код Java.

Типичные ошибки новичков

Вот что чаще всего путают те, кто начинает учить Kotlin:

  1. Забывают тип переменной
    // Ошибка: нужно указать тип или использовать val/var
    val имя = "Анна" // Правильно: Kotlin сам догадается
    var возраст: Int = 12 // Правильно: явно указали тип
  2. Путают val и var
    val константа = 5
    константа = 10 // Ошибка! val нельзя менять
    
    var переменная = 5
    переменная = 10 // Правильно: var можно менять
  3. Забывают скобки в if
    // Ошибка: в Kotlin if всегда с круглыми скобками
    if возраст > 18 { // Неправильно
        println("Взрослый")
    }
    
    if (возраст > 18) { // Правильно
        println("Взрослый")
    }
  4. Путают == и =
    val a = 5
    if (a = 5) { // Ошибка! = это присваивание
        println("Равно")
    }
    
    if (a == 5) { // Правильно: == это сравнение
        println("Равно")
    }
  5. Забывают про null
    var имя: String = null // Ошибка! String не может быть null
    var имя: String? = null // Правильно: ? означает "может быть null"
    
    // Чтобы использовать, нужно проверить:
    if (имя != null) {
        println(им