Оглавление....6
Предисловие....12
Как устроена эта книга?....13
Как были выбраны темы?....13
Уровень сложности....14
Идеальный код....15
Форматирование кода....15
Условные обозначения....16
Использование примеров кода....17
Платформа онлайн-обучения O’Reilly....18
Как с нами связаться?....18
Благодарности....19
Благодарности Дункана....19
Благодарности Нэта....20
Глава 1. Введение....22
Сущность языка программирования....22
История стилей программирования на Java (на наш взгляд)....25
Первобытный стиль....25
Стиль JavaBeans....26
Корпоративный стиль....27
Инверсия абстракции....28
Современный стиль....30
Будущее....30
Сущность Kotlin....30
Рефракторинг на Kotlin....32
Принципы рефакторинга....33
Подразумеваем хорошее покрытие тестами....34
Фиксации изменений рассчитаны на Git Bisect....34
Над чем мы работаем?....35
Приступим!....35
Глава 2. Перевод проектов с Java на Kotlin....36
Стратегия....36
Добавление поддержки Kotlin в сборку Java....38
Другие системы сборки....41
Двигаемся дальше....41
Глава 3. От классов Java к классам Kotlin....42
Исходный код....42
Простой тип значений....42
Ограничения классов данных....49
Двигаемся дальше....53
Глава 4. От необязательных типов к обнуляемым....55
Как представить отсутствие чего-либо?....55
Рефракторинг от необязательных типов к обнуляемым....57
Итерация и цикл for....59
Рефракторинг с помощью Expand-and-Contract....65
Рефракторинг в код, характерный для Kotlin....65
Двигаемся дальше....72
Глава 5. От объектов JavaBeans к значениям....73
JavaBeans....73
Значения....74
Почему следует выбирать значения?....75
Рефакторинг экземпляров JavaBeans в значения....75
Равенство объектов....82
Двигаемся дальше....83
Глава 6. От коллекций Java к коллекциям Kotlin....84
Коллекции Java....84
Не изменяйте разделяемые коллекции....87
Коллекции Kotlin....87
Рефакторинг от коллекций Java к коллекциям Kotlin....90
Подправим код на Java....91
Преобразование в Kotlin....96
Двигаемся дальше....100
Глава 7. От действий к вычислениям....101
Функции....101
Вычисления....102
Вычисляемое свойство или функция?....103
Действия....103
Почему это должно нас волновать?....104
Процедурное программирование....105
Почему предпочтение отдается вычислениям?....105
Рефракторинг действий в вычисления....106
Существующий код....106
2015 был концом времени....110
Улучшенный проект....110
Конец игры....116
Двигаемся дальше....119
Глава 8. От статических методов к функциям верхнего уровня....120
Модификатор Static в Java....120
Статическое состояние....120
Функции верхнего уровня в Kotlin, объекты и объекты-компаньоны....121
Рефракторинг от статических методов к функциям верхнего уровня....123
Удобные функции....124
Перемещение на верхний уровень....127
Kotlin'изация....128
Перемещение функций верхнего уровня....130
Двигаемся дальше....130
Глава 9. От многострочных функций к однострочным....131
Попытка № 1: Замена встроенным выражением....133
Попытка № 2: Ввести функцию....134
Попытка № 3: Блок Let....139
Попытка № 4: Отступление....141
Что должен возвращать метод Parse?....144
Двигаемся дальше....144
Глава 10» От функций к функциям-расширениям....146
Функции и методы....146
Функции-расширения....148
Расширения и типы функций....149
Свойства-расширения....150
Преобразования....150
Как именовать преобразования?....151
Обнуляемые параметры....152
Обнуляемые получатели....153
Обобщенные расширения....155
Функции-расширения в качестве методов....156
Рефракторинг к функциям-расширениям....156
Двигаемся дальше....172
Глава 11. От методов к свойствам....173
Поля, акцессоры и свойства....173
Как выбрать?....177
Мутирующие свойства....179
Рефракторинг к свойствам....179
Двигаемся дальше....185
Глава 12. От функций к операторам....186
Базовый класс: Money....186
Добавление определяемого пользователем оператора....188
Вызов нашего оператора из существующего кода Kotlin....190
Операторы для существующих классов Java....192
Соглашения для аннотаций значений....192
Двигаемся дальше....196
Глава 13. От потоков к итерируемым объектам и последовательностям....197
Потоки в Java....197
Итераторы в Kotlin....199
Последовательности в Kotlin....200
Замена итераций и последовательностей....200
Множественные итерации....201
Выбор между потоками, итераторами и последовательностями....204
Алгебраическая трансформация....205
Рефракторинг от потоков к итераторам и последовательностям....208
Сначала итераторы....211
Последовательности....215
Извлечение части конвейера....219
Итоговая уборка....221
Двигаемся дальше....222
Глава 14. От накопления объектов к преобразованиям....223
Вычисление с использованием параметров накопления....223
Рефакторинг функций над немутирующими данными....228
Давайте проделаем это снова....234
Обогащение обнаруженной нами абстракции....238
По поводу имен....239
Двигаемся дальше....240
Глава 15. От инкапсулированных коллекции к псевдонимам типов....242
Защитные копии....243
Создание коллекций доменов....244
Коллекции с другими свойствами....245
Рефракторинг инкапсулированных коллекций....246
Преобразование операций в расширения....247
Замена псевдонима типа....249
Рефракторинг коллекций с другими свойствами....255
Двигаемся дальше....258
Глава 16. От интерфейсов к функциям....260
Объектно-ориентированная инкапсуляция....261
Функциональная инкапсуляция....264
Функциональные типы в Java....267
Сочетание и совмещение....270
Выразительные типы функций....272
Сравнение подходов....273
Соединение....276
Объектно-ориентированный или функциональный?....277
Наследие Java....280
Прослеживаемость....281
Рефракторинг от интерфейсов к функциям....281
Введение функций....285
Двигаемся дальше....289
Глава 17. От мокинга к маппингу....290
Повреждение теста, вызванное моком....291
Замена мокинга маппингом....293
Но действительно ли мы хотим уйти от моков?....298
Двигаемся дальше....302
Глава 18. От открытых классов к запечатанным....303
Полиморфизм или запечатанные классы?....307
Преобразование интерфейса в запечатанный класс....308
Двигаемся дальше....316
Глава 19. От проверяемых исключений к типам результатов....317
Перезагрузка интернет-соединения....317
Обработка ошибок до появления методов, основанных на исключениях....319
Обработка ошибок с исключениями....320
Java и проверяемые исключения....321
Как должен быть оформлен сбой parselnt?....322
Kotlin и исключения....323
За пределами исключений: функциональная обработка ошибок....323
Обработка ошибок в Kotlin....327
Рефракторинг от исключений к обработке ошибок....328
HTTP....329
Наша стратегия преобразования....330
Начнем с самого низа....331
Именование....332
Контракт....336
Отступление....340
Еще исправления....344
Слои....350
Двигаемся дальше....352
Глава 20. От выполнения ввода/вывода к передаче данных....354
Прослушивание тестов....354
Ввод/вывод данных....357
Рефакторинг для удобства чтения....362
Эффективное написание....362
Еще о стимулах к работе....362
Эффективное считывание....366
Двигаемся дальше....371
Глава 21. От исключений к значениям....372
Определение того, что может пойти не так....372
Представление ошибок....380
А как насчет ввода/вывода?....388
Двигаемся дальше....389
Глава 22. От классов к функциям....390
Приемочный тест....390
Модульное тестирование....395
Заголовки....400
Различные разделители полей....409
Последовательности....416
Считывание из файла....422
Сравнение с Commons CSV....427
Двигаемся дальше....433
Глава 23. Продолжение путешествия....434
О сущностях....434
Функциональное мышление....435
Простая конструкция....437
Функциональное программирование и текстуальные рассуждения....438
Рефакторинг....439
Рефакторинг и функциональное мышление....440
Предметный указатель....442
Об авторах....444
Об изображении на обложке....445
Книга описывает практические приемы рефакторинга и переноса кода написанных на Java мобильных приложений для Android на язык Kotlin с сохранением совместимости. Приведено подробное сравнение этих двух языков, даны примеры перевода проектов с Java на Kotlin, добавления поддержки Kotlin в сборку Java. Показан переход от классов Java к классам Kotlin, от коллекций Java к коллекциям Kotlin, от объектов JavaBeans к значениям, от статических методов к функциям верхнего уровня. Подробно рассматривается обработка ошибок, приведены практические приемы управления проектами со смешанной кодовой базой. Даны советы по рефакторингу кода и функциональному программированию на Kotlin.
Для программистов
Расстояние от острова Ява до острова Котлин составляет 9892 километра по прямой. Чтобы преодолеть его, не пользуясь воздушным транспортом, понадобится как минимум неделя. Если вы — опытный Java-разработчик, который решил перейти на Kotlin, вам потребуется примерно столько же времени. Вы обнаружите, что в Kotlin все делается по-другому, он требует иных подходов к программированию. Этот язык более функционален, у него больше возможностей, поэтому перенос кода ваших проектов с Java на Kotlin — отличная идея.
Ваши гиды Дункан и Нэт уже проделали этот путь в 2015 году, и с тех пор помогли многим командам и отдельным разработчикам повторить его. Путешествуйте вместе с ними по проверенному маршруту, включающему такие промежуточные остановки, как переход от объектов JavaBeans к значениям, от коллекций Java к коллекциям Kotlin и от классов Java к классам Kotlin.
Авторы подробно объясняют ключевые концепции, а затем показывают, как постепенно и безопасно перенести код Java в идиоматичный Kotlin, сохраняя при этом совместимость. В результате код становится проще, выразительнее и удобнее для редактирования. К концу путешествия вы будете уверены в том, что сможете перевести все свои Java-проекты на платформу Kotlin, освоите Kotlin с нуля и научитесь управлять смешанной языковой базой кода по мере ее развития.