Предисловие....15
Признательности....16
Глава 1....18
Переменные, выражения и типы....18
Введение в переменные....20
Переприсваивание значений переменным....22
Переменные, которым нельзя переприсваивать новые значения....23
Именование переменных....24
Выражения и инструкции....25
Типы: разновидности значений....27
Целые и длинные числа....28
Булевы величины....29
Строковые литералы....29
Другие типы....30
Типы и переприсваивание....30
Краткий итог....30
Глава 2....32
Функции....32
Введение в функции....34
Устранение дублирования с помощью функций....35
Основы функций....36
Создание функции....36
Вызов функции....38
Аргументы и параметры: в чем разница?....41
Функции с более чем одним параметром....41
Именованные аргументы....43
Дефолтные аргументы....44
Случаи, когда дефолтный аргумент стоит на первом месте....45
Тела в форме выражений и в форме блоков....47
Функции без результата....49
Функция main()....50
Печать на экране....51
Краткий итог....53
Глава 3....55
Условные конструкции: when и if....55
Златовласка и три ветви....57
Введение в конструкцию when языка Kotlin....59
Побеждает первое истинное условие ....61
Точные совпадения....63
Должны учтитываться все условия ....64
Выражения if....65
Выражения when и if как инструкции....67
Краткий итог....68
Глава 4....69
Классы, объекты и пакеты....69
Соединение переменных и функций в одном месте....71
Определение класса....72
Пустой класс....72
Первая диаграмма....73
Объекты....74
Конструирование объектов....75
Параметры конструктора....75
Классы в сопоставлении с объектами....75
Получение значения свойства....77
Свойства с доступом только для чтения....77
Приватные свойства....78
Добавление функции-члена....79
Добавление других функций....81
Анатомия класса....83
Абсолютно все является объектом....83
Числа типа Double как объекты....83
Строковые литералы как объекты....84
Булевы величины как объекты....84
Объекты-одиночки....85
Группировка в пакеты....87
Квалифицирование элементов исходного кода....89
Импорт элементов исходного кода....90
Именованный импорт....91
Импорт с подстановочным знаком....91
Импорт из стандартной библиотеки....92
Краткий итог....94
Глава 5....95
Перечислительные классы....95
Создание перечислительного класса....98
Использование перечислительного класса....99
Использование перечислительных классов с выражениями when....100
Добавление свойств и функций в перечислительные классы....101
Встроенные свойства....103
Свойство ordinal....103
Свойство name....104
Краткий итог....105
Глава 6....107
Отсутствие значений и защита от null....107
Введение в null....109
Присутствующие и отсутствующие значения....111
Типы, которые можно и нельзя использовать с null ....113
Время компиляции и время исполнения....114
Взаимосвязь типов, которые можно и нельзя использовать с null ....115
Ожидание типа, который можно использовать с null....116
Ожидание типа, который нельзя использовать с null....118
Использование условных конструкций для проверки на null....121
Использование оператора Элвиса для предоставления дефолтного значения....124
Использование оператора принудительной конвертации в не-null для обеспечения присутствия значения ....126
Ошибки во время компиляции и во время исполнения....128
Когда использовать оператор принудительной конвертации в не-null?....129
Использование оператора защищенного вызова для обращения к функциям и свойствам....129
Краткий итог....133
Глава 7....134
Лямбды и ссылки на функции....134
Ножницы и машинки Берта....136
Введение в функциональные типы ....139
Две функции с одинаковыми типами....142
Передача функций функциям....143
Возвращение функций из функций....144
Введение в лямбды....145
Традиционные функции и лямбды....147
Неявный параметр it....148
Лямбды и функции более высокого порядка....148
Передача лямбд в качестве аргументов....148
Возвращение лямбд в качестве результатов функций....150
Лямбды с несколькими инструкциями....151
Замыкания....152
Краткий итог....154
Глава 8....156
Коллекции: списки и множества....156
Введение в списки....158
Коллекции и типы....160
Добавление и удаление элемента....161
Список и мутируемый список....164
Получение элемента из списка....165
Циклы и итерации....167
Операции на коллекциях....170
Отображение коллекций: конвертация элементов....171
Сортировка коллекций....173
Фильтрация коллекций: включение и исключение элементов....174
Цепочки операций на коллекциях....176
Другие операции на коллекциях....178
Введение в множества....178
Краткий итог....180
Глава 9....182
Словари....182
Правильный инструмент для работы....184
Ассоциирование данных между собой....184
Основы словарей....186
Создание словаря с помощью mapOf()....188
Поиск значения....189
Изменение словаря....190
Операции на словарях....192
Фильтрация....193
Установка дефолтных значений....195
Создание словаря из списка....196
Ассоциирование свойств из списка объектов....196
Краткий итог....203
Глава 10....204
Получатели и расширения....204
Независимые функции и объектные функции....206
Как ни крути, они не такие уж и разные....209
Введение в получатели....209
Введение в функции-расширения....212
Получатели с типом, который можно использовать с null....214
Свойства-расширения....216
Краткий итог....217
Глава 11....218
Диапазоны доступности и диапазонные функции....218
Введение в диапазоны доступности....220
Диапазоны и видимость....222
Диапазоны инструкций....223
Диапазоны объявлений....224
Вложенные диапазоны и видимость....225
Введение в диапазонные функции....231
with()....231
run()....232
let()....234
also()....236
apply()....237
Выбор наиболее подходящей диапазонной функции....238
Какую диапазонную функцию следует использовать?....239
Затенение имен....239
Затенение и неявные получатели....241
Затенение, неявные получатели и this....243
Диапазонные функции и проверки на null....244
Краткий итог....245
Глава 12....247
Введение в интерфейсы....247
Сью открывает ферму....249
Введение в интерфейсы....254
Подтипы и надтипы....256
Подтипы и подстановка....257
Приведение типа....259
Умное приведение типа....260
Явное приведение типа....261
Несколько интерфейсов....262
Наследование интерфейсов....264
Дефолтные реализации....267
Краткий итог....269
Глава 13....271
Введение в делегирование действий между классами....271
Ужин Роджера вне дома....273
Делегирование действий в ресторанах и в исходном коде....273
Ручное делегирование действий....274
Делегирование дополнительных вызовов функций....277
Простое делегирование по Kotlin’овски....279
Несколько делегатов....280
Переопределение делегированного вызова....282
Урегулирование конфликтов....283
Делегирование действий для общих и конкретных типов....286
Краткий итог....289
Глава 14....291
Абстрактные и открытые классы....291
Моделирование автомобиля....293
Введение в абстрактные классы....296
Расширение абстрактных классов....296
Наследование....298
Интерфейс и реализация....299
Переопределение членов....301
Защищенная видимость....302
Абстрактные функции и свойства....303
Открытые функции и свойства....304
Введение в открытые классы....305
Модификаторы видимости: извлекатели и установители....306
Комбинирование интерфейсов и абстрактных/открытых классов....308
Сравнение интерфейсов, абстрактных и открытых классов ....308
Подклассы и подстановка....309
Иерархии классов....310
Тип Any....311
Краткий итог....312
Глава 15....313
Классы данных и деструктуризация....313
Переопределение функции equals()....315
Равенство ссылок....315
Равенство значений....316
Переопределение функции hashCode()....320
Переопределение функции toString()....322
Введение в классы данных....324
Копирование классов данных....326
Деструктуризация....328
Деструктуризация и стандартная библиотека....331
Деструктуризация классов, не предназначенных для хранения только данных....333
Ограничения классов данных....335
Классы данных и наследование....336
Параметры конструктора....336
Краткий итог....338
Глава 16....339
Запечатанные типы....339
Добавление еще одного типа....343
Введение в запечатанные типы....346
Запечатанные классы....348
Зачем вообще нужен модификатор sealed?....349
Ограничения подтипа запечатанного типа....351
Запечатанные типы в сопоставлении с перечислительными классами....353
Краткий итог....356
Глава 17....357
Обработка исключений во время исполнения программы....357
Проблемы во время исполнения....359
Стек вызовов....360
Стеки вызовов, исключения и сообщения об ошибках....364
Перехват исключений....367
Исключения являются объектами....371
Запуск исключений....373
Типы исключений....374
Обработка нескольких типов исключений по-разному....378
Вычисление результата выражения try....379
Конструкция Try-Catch-Finally....381
Функциональный подход к обработке исключений....383
Краткий итог....384
Глава 18....385
Обобщенные типы....385
Кружки и напитки....387
Объявленные типы, фактические типы и совместимость присваиваний ....390
Введение в обобщенные типы....392
Объявление обобщенного типа....392
Использование обобщенного типа....394
Установление ограничений на параметры типа....396
Обобщенные типы на практике....399
Использование параметров типа....399
Обобщенные типы с несколькими параметрами типа....399
Обобщенные интерфейсы и надклассы....399
Обобщенные функции....401
Обобщенные типы в стандартной библиотеке....402
List и Set....402
Pair....403
Издержки обобщенных типов....404
Совместимость присваиваний у обобщенных типов....404
Стирание типов....405
Краткий итог....407
Глава 19....408
Вариантность в обобщенных типах....408
Ковариантность....410
Контрвариантность....415
Что делает подтип подтипом?....420
Модификаторы вариантности....422
Модификатор out....424
Модификатор in....425
Вариантность на нескольких параметрах типа....426
Проекции типов....427
Исходящие проекции....430
Входящие проекции....431
Звездные проекции....432
Вариантность в стандартной библиотеке....434
Краткий итог....435
Глава 20....436
Самое необходимое о сопрограммах....436
По одному делу за раз.......438
Однопоточный блокирующий исходный код....439
Сопрограммы и конкурентность....441
Введение в сопрограммы....442
По два дела за раз.......451
Моделирование строительной площадки ....452
Два робота, по два дела за раз.......457
Многопоточная конкурентность....459
withContext(): передача работы другому диспетчеру....463
Отмены....467
Отмена всей работы....467
Отмена части работы....472
Когда невозможно оправиться от проблемы....474
Исключения в сопрограммах....474
Краткий итог....476
Дополнение А. Как исполнять листинги исходного кода....478
Загрузка проекта с образцами исходного кода....478
Создание проекта Kotlin....479
Добавление файлов Kotlin Script (.kts)....481
Добавление файлов Kotlin (.kt)....481
Другие способы написания и исполнения исходного кода Kotlin....482
Обследование онлайновой игровой площадки....482
Продвинутые опции....482
Дополнение Б. Добавление зависимостей....483
Добавление зависимостей в проект Gradle....484
Добавление зависимостей в проект Maven....485
Краткий итог....486
Предметный указатель....487
_GoBack....429
Программируйте весело и эффективно – изучайте Kotlin с удовольствием!
Эта книга проведет вас по основам языка шаг за шагом – с забавными иллюстрациями, понятными примерами и четкими объяснениями. Вы усвоите основные понятия по порядку и без лишней сложности, построив прочную базу знаний. Автор более 25 лет занимается разработкой программного обеспечения, а с 2017 года пишет о Kotlin и рисует о нем смешные комиксы.
Издание станет идеальным помощником начинающим изучать программирование или желающим восполнить пробелы в знаниях.