Head First
Kotlin
Wouldn't it be dreamy if there
were a book on Kotlin that was
easier to understand than the
space shuttle fl ight manual?
I guess it's just a fantasy…
Dawn Griffiths
David Griffiths
Head First
Head First
Kotlin
Kotlin
Wouldn't it be dreamy if there
Как бы было хорошо
were a book on Kotlin that was
найти книгу о языке Kotlin,
easier to understand than the
которая будет веселее визита к зубному
space shuttle fl ight manual?
врачу и понятнее налоговой декларации...
I guess it's just a fantasy…
Наверное, об этом можно
только мечтать...
Dawn Griffiths
Дон Гриффитс
David Griffiths
Дэвид Гриффитс
2020
Дон Гриффитс, Дэвид Гриффитс
Head First. Kotlin
Перевел с английского Е. Матвеев
Заведующая редакцией
Ю. Сергиенко
Ведущий редактор
К. Тульцева
Литературный редактор
А. Руденко
Художественный редактор
В. Мостипан
Корректоры
С. Беляева, Б. Файзуллин
Верстка
Н. Лукьянова
ББК 32.973.2-018.1
УДК 004.43
Гриффитс Дон, Гриффитс Дэвид
Г85 Head First. Kotlin. — СПб.: Питер, 2020. — 464 с.: ил. — (Серия «Head First O’Reilly»).
ISBN 978-5-4461-1335-4
Вот и настало время изучить Kotlin. В этом вам поможет уникальная методика Head First, выходящая за рамки синтаксиса и ин-
струкций по решению конкретных задач. Хотите мыслить, как выдающиеся разработчики Kotlin? Эта книга даст вам все необходи-
мое — от азов языка до продвинутых методов. А еще вы сможете попрактиковаться в объектно-ориентированном и функциональном
программировании. Если вы действительно хотите понять, как устроен Kotlin, то эта книга для вас!
Почему эта книга не похожа на другие? Подход Head First основан на новейших исследованиях в области когнитивистики и теории
обучения. Визуальный формат позволяет вовлечь в обучение мозг читателя лучше, чем длинный текст, который вгоняет в сон. Зачем
тратить время на борьбу с новыми концепциями? Head First задействует разные каналы получения информации и разрабатывался с
учетом особенностей работы вашего мозга.
16+ (В соответствии с Федеральным законом от 29 декабря 2010 г. № 436-ФЗ.)
ISBN 978-1491996690 англ.
Authorized Russian translation of the English edition of Head First Kotlin
(ISBN 9781491996690) © 2019 Dawn Griffiths and David Griffiths.
This translation is published and sold by permission of O’Reilly Media, Inc.,
which owns or controls all rights to publish and sell the same.
ISBN 978-5-4461-1335-4
© Перевод на русский язык ООО Издательство «Питер», 2020
© Издание на русском языке, оформление ООО Издательство «Питер», 2020
© Серия «Head First O’Reilly», 2020
Права на издание получены по соглашению с O’Reilly. Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой
бы то ни было форме без письменного разрешения владельцев авторских прав.
Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как надежные. Тем не менее, имея в виду
возможные человеческие или технические ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых сведений
и не несет ответственности за возможные ошибки, связанные с использованием книги. Издательство не несет ответственности за доступность
материалов, ссылки на которые вы можете найти в этой книге. На момент подготовки книги к изданию все ссылки на интернет-ресурсы были дей-
ствующими.
Изготовлено в России. Изготовитель: ООО «Прогресс книга». Место нахождения и фактический адрес:
194044, Россия, г. Санкт-Петербург, Б. Сампсониевский пр., д. 29А, пом. 52. Тел.: +78127037373.
Дата изготовления: 09.2019. Наименование: книжная продукция. Срок годности: не ограничен.
Импортер в Беларусь: ООО «ПИТЕР М», 220020, РБ, г. Минск, ул. Тимирязева, д. 121/3, к. 214, тел./факс: 208 80 01.
Налоговая льгота — общероссийский классификатор продукции ОК 034-2014, 58.11.12.000 — Книги печатные
профессиональные, технические и научные.
Подписано в печать 19.09.19. Формат 84×108/16. Бумага писчая. Усл. п. л. 48,720. Тираж 1500. Заказ 0000.
Содержание (сводка)
Введение
21
1
Первые шаги. Не теряя времени
31
2
Базовые типы и переменные. Из жизни переменных
61
3
Функции. За пределами main
89
4
Классы и объекты. Высокий класс
121
5
Подклассы и суперклассы. Наследование
121
6
Абстрактные классы и интерфейсы. Серьезно о полиморфизме
185
7
Классы данных. Работа с данными
221
8
Null и исключения. В целости и сохранности
249
9
Коллекции. Порядок превыше всего
281
10
Обобщения. На каждый вход знай свой выход
319
11
Лямбда-выражения и функции высшего порядка.
Обработка кода как данных
325
12
Встроенные функции высшего порядка.
Расширенные возможности
393
Приложение I. Сопрограммы. Параллельный запуск
427
Приложение II. Тестирование. Код под контролем
439
Приложение III. Остатки. Топ-10 тем, которые мы не рассмотрели
445
Содержание (настоящее)
Введение
Ваш мозг и Kotlin. Вы сидите за книгой и пытаетесь что-нибудь
выучить, но ваш мозг считает, что вся эта писанина не нужна. Мозг
говорит: «Выгляни в окно! На свете есть более важные вещи, на-
пример сноуборд». Как заставить мозг изучить программирование
на Kotlin?
22
23
И мы знаем, о чем думает ваш мозг
23
Метапознание: наука о мышлении
25
Вот что сделали МЫ
Примите к сведению
28
Научные редакторы
29
Благодарности
30
5
содержание
Не теряя времени
1 Первые шаги
Kotlin впечатляет. С выхода самой первой версии Kotlin впечатляет програм-
мистов своим удобным синтаксисом, компактностью, гибкостью и мощью.
В этой книге мы научим вас строить собственные приложения Kotlin, а для
начала покажем, как построить простейшее приложение и запустить его. Попутно
вы познакомитесь с базовыми элементами синтаксиса Kotlin: командами, циклами
и условными конструкциями. Приготовьтесь, путешествие начинается!
Раз вы можете выбирать плат-
форму, для которой должен компи-
лироваться код, это означает, что
ваш код Kotlin может выполняться
на серверах, в брауз
ерах, на мобиль-
ных устройствах и т. д.
elliJ IDEA
Int
6
содержание
Базовые типы и переменные
Из жизни переменных
2От переменных зависит весь ваш код. В этой главе мы заглянем «под
капот» и покажем, как на самом деле работают переменные Kotlin. Вы по-
знакомитесь с базовыми типами, такими как Int, Float и Boolean, и узнаете, что
компилятор Kotlin способен вычислить тип переменной по присвоенному ей
значению. Вы научитесь пользоваться строковыми шаблонами для построения
сложных строк с минимумом кода, и узнаете, как создать массивы для хране-
ния нескольких значений. Напоследок мы расскажем, почему объекты играют
такую важную роль в программировании Kotlin.
Byte Short
Int
Long
REF
5
x
Int
var Int
7
содержание
Функции
За пределами main
3 А теперь пришло время поближе познакомиться с функци-
ями. До сих пор весь написанный нами код размещался в функции main
приложения. Но если вы хотите, чтобы код был лучше структурирован
и проще в сопровождении, необходимо знать, как разбить его на от-
дельные функции. В этой главе на примере игры вы научитесь писать
функции и взаимодействовать с ними из приложения. Вы узнаете, как пи-
сать компактные функции единичных выражений. Попутно вы научитесь
перебирать диапазоны и коллекции в мощных циклах for.
"Rock"
"Paper"
String
String
REF
"Scissors"
options
REF
REF
REF
String
val Array<String>
0
1
2
8
содержание
Высокий класс
4 Классы и объекты
Пришло время выйти за границы базовых типов Kotlin. Рано
или поздно базовых типов Kotlin вам станет недостаточно. И здесь на помощь
приходят классы. Классы представляют собой шаблоны для создания ваших
собственных типов объектов и определения их свойств и функций. В этой главе
вы научитесь проектировать и определять классы, а также использовать их
для создания новых типов объектов. Вы познакомитесь с конструкторами,
блоками инициализации, get- и set-методами и научитесь использовать их для
защиты свойств. В завершающей части вы узнаете о средствах защиты данных,
встроенных в весь код Kotlin. Это сэкономит ваше время, силы и множество
нажатий клавиш.
Один класс
Dog
name
weight
breed
bark()
Много объектов
Под капотом
name: “Fido”
Dog
REF
weight: 70
name
breed: “Mixed”
weight
myDog
breed
Dog
bark()
var Dog
9
содержание
Подклассы и суперклассы
Наследование
5 Вам когда-нибудь казалось, что если немного изменить
тип объекта, то он идеально подойдет для ваших целей?
Что ж, это одно из преимуществ наследования. В этой главе вы научитесь
создавать подклассы и наследовать свойства и функции суперклассов.
Вы узнаете, как переопределять функции и свойства, чтобы классы
работали так, как нужно вам, и когда это стоит (или не стоит) делать. На-
конец, вы увидите, как наследование помогает избежать дублирования
кода, и узнаете, как сделать код более гибким при помощи полиморфизма.
Animal
image
food
habitat
hunger
makeNoise()
eat()
roam()
sleep()
Hippo
Canine
image
food
roam()
habitat
makeNoise()
eat()
Wolf
image
food
habitat
makeNoise()
eat()
10
содержание
Абстрактные классы и интерфейсы
Серьезно о полиморфизме
6 Иерархия наследования суперклассов — только первый шаг.
Чтобы в полной мере использовать возможности полиморфизма, следует
проектировать иерархии с абстрактными классами и интерфейсами. В этой
главе вы узнаете, как при помощи абстрактных классов управлять тем, какие
классы могут или не могут создаваться в вашей иерархии. Вы увидите, как
с их помощью заставить конкретные подклассы предоставлять собственные
реализации. В этой главе мы покажем, как при помощи интерфейсов органи-
зовать совместное использование поведения в независимых классах,
(interface)
а заодно опишем нюансы операторов is, as и when.
Roamable
roam()
Vehicle
roam()
Работайте со мной
как с Wolf — вам это
известно.
REF
item
Оператор
val Roamable
Wolf
11
содержание
Работа с данными
7 Классы данных
Никому не хочется тратить время и заново делать то, что уже
было сделано. В большинстве приложений используются классы, предназна-
ченные для хранения данных. Чтобы упростить работу, создатели Kotlin предложили
концепцию класса данных. В этой главе вы узнаете, как классы данных помогают
писать более элегантный и лаконичный код, о котором раньше можно было
только мечтать. Мы рассмотрим вспомогательные функции классов данных
и узнаем, как разложить объект данных на компоненты. Заодно расскажем,
как значения параметров по умолчанию делают код более гибким, а также
познакомим вас с Any — предком всех суперклассов.
Any
Оператор
equals()
hashCode()
toString()
...
YourClassHere
По умолчанию
функция equals
проверяет,
являются ли два
объекта одним
фактическим
объектом.
12
содержание
Null и исключения
В целости и сохранности
8 Все мечтают о безопасности кода, и, к счастью, она была
заложена в основу языка Kotlin. В этой главе мы сначала покажем,
что при использовании null-совместимых типов Kotlin вы вряд ли когда-ли-
бо столкнетесь с исключениями NullPointerException за все время про-
граммирования на Kotlin. Вы научитесь использовать безопасные вызовы
и узнаете, как Элвис-оператор спасает от всевозможных бед. А когда мы
разберемся с null, то вы сможете выдавать и перехватывать исключения
как настоящий профессионал.
?:
Большое
спасибо.
«Элвис-оператор»
А теперь я ПОПРОБУЮ
выполнить этот риско-
ванный трюк...
13
содержание
Коллекции
Порядок превыше всего
9 Хотели бы вы иметь структуру данных более гибкую, чем мас-
сив? Kotlin содержит подборку удобных коллекций, гибких и предоставляющих
больше возможностей для управления хранением и управлением группами
объектов. Хотите список с автоматически изменяемым размером, к которому
можно добавлять новые элементы снова и снова? С возможностью сортиров-
ки, перетасовки или перестановки содержимого в обратном порядке? Или
хотите структуру данных, которая автоматически уничтожает дубликаты без
малейших усилий с вашей стороны? Если вас заинтересовало все это (а также
многое другое) — продолжайте читать.
“Tea”
REF
0
String
1
REF
“Coffee”
REF
Список (List)
2
String
разрешает
дубликаты.
List
List позволяет дублировать значения
“ValueA”
“ValueB”
REF
REF
REF
Ассоциативные массивы
“KeyA”
“KeyB”
“KeyC”
Map
Ассоциативный массив (Map)
разрешает дубликаты значений,
но не дубликаты ключей.
14
содержание
Обобщения
На каждый вход знай свой выход
10 Всем нравится понятный и предсказуемый код. А один из спо-
собов написания универсального кода, в котором реже возникают проблемы,
заключается в использовании обобщений. В этой главе мы покажем, как
классы коллекций Kotlin используют обобщения, чтобы вы не смешивали
салат и машинное мало. Вы узнаете, как и в каких случаях писать соб-
ственные обобщенные классы, интерфейсы и функции и как ограничить
обобщенный тип конкретным супертипом. Наконец, научитесь пользоваться
ковариантностью и контрвариантностью, чтобы ВЫ сами управляли
поведением своего обобщенного типа.
С обобщениями на ВХОД
поступают только ссылки
на объекты Duck...
Duck
Duck
Duck
Duck
MutableList<Duck>
Duck
Duck
Duck
Duck
...и на ВЫХОДЕ они
остаются ссылками
с типом Duck.
Vet<T: Pet>
treat(t: T)
15
содержание
Обработка кода как данных
11 Лямбда-выражения и функции высшего порядка
Хотите писать еще более гибкий и мощный код? Тогда вам понадобятся
лямбда-выражения. Лямбда-выражение, или просто лямбда, представляет собой
блок кода, который можно передавать как объект. В этой главе вы узнаете, как опре-
делить лямбда-выражение, присвоить его переменной, а затем выполнить
его код. Вы узнаете о функциональных типах и о том, как они используются для
написания функций высшего порядка, использующих лямбда-выражения для па-
раметров или возвращаемых значений. А попутно вы узнаете, как синтаксический
сахар подсластит вашу программистскую жизнь.
λ
λ
Kgs to Pounds
Pounds to US Tons
Мы создадим
функцию, ко- combine()
торая объ-
единяет два
лямбда-выра
-
жения в одно.
λ
Kgs to US Tons
Я получаю один пара-
метр Int с именем x.
Я прибавляю 5 к x
и возвращаю результат.
{ x: Int, y: Int -> x + y }
λ
Lambda
16
содержание
Расширенные возможности
12Встроенные функции высшего порядка
Kotlin содержит подборку встроенных функций высшего по-
рядка. В этой главе представлены некоторые полезные функции этой категории.
Вы познакомитесь с гибкими фильтрами и узнаете, как они используются для
сокращения размера коллекции. Научитесь преобразовывать коллекции
функцией map, перебирать их элементы в forEach, а также группировать
элементы коллекций функцией groupBy. Мы покажем, как использовать fold
для выполнения сложных вычислений всего в одной строке кода. К концу этой
главы вы научитесь писать мощный код, о котором и не мечтали.
У этих предметов не су-
ществует естественного
порядка. Чтобы найти
наименьшее или наиболь-
шее значение, необходи-
мо задать некоторые
критерии — например,
unitPrice или quantity.
1
Функ-
REF
ция fold
0
начинает
Int
с первого
2
элемента
REF
коллекции.
1
Int
2
REF
3
Int
List<Int>
17
содержание
Сопрограммы
Параллельный запуск
I Некоторые задачи лучше выполнять в фоновом режиме. Если вы
загружаете данные с медленного внешнего сервера, то вряд ли захотите, чтобы
остальной код простаивал и дожидался завершения загрузки. В подобных ситуа-
циях на помощь приходят сопрограммы. Сопрограммы позволяют писать код,
предназначенный для асинхронного выполнения. А это означает сокращение
времени простоя, более удобное взаимодействие с пользователем и улучшенная
масштабируемость приложений. Продолжайте читать, и вы узнаете, как говорить
с Бобом, одновременно слушая Сьюзи.
Бам! Бам! Бам! Бам! Бам! Бам! Дынц! Дынц!
Код воспроизводит звуко-
После этого
вой файл toms шесть раз.
звук тарелок
воспроизво-
дится дважды.
Тестирование
Код под контролем
II Хороший код должен работать, это все знают. Но при любых изме-
нениях кода появляется опасность внесения новых ошибок, из-за которых код не
будет работать так, как положено. Вот почему так важно провести тщательное
тестирование: вы узнаете о любых проблемах в коде до того, как он будет
развернут в среде реальной эксплуатации. В этом приложении рассматриваются
JUnit и KotlinTest — библиотеки модульного тестирования, которые дадут вам
дополнительные гарантии безопасности.
18
содержание
Остатки
Топ-10 тем, которые мы не рассмотрели
III Но и это еще не все. Осталось еще несколько тем, о которых, как нам
кажется, вам следует знать. Делать вид, что их не существует, было бы не-
правильно — как, впрочем, и выпускать книгу, которую поднимет разве что
культурист. Прежде чем откладывать книгу, ознакомьтесь с этими лакомыми
кусочками, которые мы оставили напоследок.
x: String
Бам! Бам! Бам! Бам! Бам! Бам! Дынц! Дынц!
y: String
Outer
Inner
Объекты Inner и Outer объ-
единены связью особого рода.
Inner может использовать
переменные Outer, и наоборот.
19
Посвящается светлым умам разработчиков
Kotlin, которые создали такой замечательный
язык программирования.
Об авторах
Дэвид
Гриффитс
Дон
Гриффитс
Дон Гриффитс уже более 20 лет работает
Дэвид Гриффитс работал Agile-коучем, раз-
в IT-отрасли на должностях старшего разработ-
работчиком и рабочим на автозаправке (хотя и
чика и старшего архитектора ПО.
немного в другом порядке). Увлекся программи-
рованием в 12 лет, после просмотра документаль-
Она написала несколько книг из серии Head First,
ного фильма о работе Сеймура Пейперта. В 15 лет
включая Head First. Программирование для Android.
он написал реализацию языка программирова-
Кроме того, со своим мужем Дэвидом разработала
ния LOGO, созданного Пейпертом. Прежде чем
анимационный видеокурс The Agile Sketchpad — ме-
браться за книгу Head First Kotlin, Дэвид написал
тод представления ключевых концепций и при-
еще несколько книг из серии Head First, включая
емов, который бы обеспечивал максимальную
Head First. Программирование для Android, и создал
активность мозга и его непосредственное участие
видеокурс The Agile Sketchpad при участии Дон.
в процессе обучения.
Когда он не занят программированием, литера-
Когда Дон не пишет книги и не снимает видео,
турной работой или преподаванием, проводит
она обычно совершенствует свое мастерство
время в путешествиях со своей очаровательной
тайцзи, увлекается чтением, бегом, плетением
женой и соавтором — Дон.
кружев и кулинарией. Но больше всего ей нра-
Наши микроблоги Twitter доступны по адресу
вится проводить время с ее замечательным мужем
https://twitter.com/ HeadFirstKotlin.
Дэвидом.
20
Как работать с этой книгой
Введение
Не могу поверить,
что они включили
такое в книгу про
Kotlin.
дальше 4 21
как работать с этой книгой
Для кого написана эта книга?
Если вы ответите «да» на все следующие вопросы:
1
У вас уже есть опыт программирования?
Это НЕ справочник.
2
Вы хотите изучить Kotlin?
Head First Kotlin — книга
для тех, кто хочет изучить
3
Вы предпочитаете заниматься практической работой
язык, а не энциклопедия все-
и применять полученные знания вместо того, чтобы
возможных фактов о Kotlin.
выслушивать нудные многочасовые лекции?
...тогда эта книга для вас.
Кому эта книга не подойдет?
Если вы ответите «да» хотя бы на один из следующих вопросов:
1
Ваш опыт программирования ограничивается одним HTML,
а с языками сценариев вы дела не имели?
(Если вы работали с циклами и логикой «if/then», все будет
нормально, но одних тегов HTML будет недостаточно.)
2
Вы — крутой программист Kotlin, которому нужен справочник?
3
Вы скорее пойдете к зубному врачу, чем опробуете что-
нибудь новое? Вы считаете, что в книге о Kotlin должно быть
рассказано все — особенно экзотические возможности,
которыми вы никогда не будете пользоваться, а если читатель
будет помирать со скуки — еще лучше?
...эта книга не для вас.
[Примечание от отдела продаж:
вообще-то эта книга для всех,
у кого есть кредитка... и если что —
PayPal тоже подойдет.]
22 введение
введение
Ìû çнаем, о ÷ем вû думаете
«Разве серьезные книги о Kotlin такие?»
«И почему здесь столько рисунков?»
Мозг считает, что
ЭТО важно.
«Можно ли так чему-нибудь научиться?»
È мû çнаем, о ÷ем думает ваø моçг
Мозг жаждет новых впечатлений. Он постоянно ищет, анализирует,
ожидает чего-то необычного. Он так устроен, и это помогает нам
выжить.
Как мозг поступает со всеми обычными, повседневными вещами?
Он всеми силами пытается оградиться от них, чтобы они не мешали
его настоящей работе — сохранению того, что действительно важно.
Мозг не считает нужным сохранять скучную информацию. Она не
проходит фильтр, отсекающий «очевидно несущественное».
Но как же мозг узнает, что важно? Представьте, что вы выехали на
прогулку и вдруг прямо перед вами появляется тигр. Что происходит
в вашей голове и теле?
Замечательно.
Еще 450 сухих,
Активизируются нейроны. Вспыхивают эмоции. Происходят хими-
скучных страниц.
ческие реакции. И тогда ваш мозг понимает...
Конечно, это важно! Не забывать!
Мозг полагает,
что ЭТО можно
А теперь представьте, что вы находитесь дома или в библиотеке — не запоминать
в теплом, уютном месте, где тигры не водятся. Вы учитесь — готови-
тесь к экзамену. Или пытаетесь освоить сложную техническую тему,
на которую вам выделили неделю... максимум десять дней.
И тут возникает проблема: ваш мозг пытается оказать вам
услугу. Он старается сделать так, чтобы на эту очевидно не-
существенную информацию не тратились драгоценные ре-
сурсы. Их лучше потратить на что-нибудь важное. На тигров,
например. Или на то, что к огню лучше не прикасаться. Или
что те фотки с вечеринки не стоило выкладывать на Facebook.
Нет простого способа сказать своему мозгу: «Послушай, мозг,
я тебе, конечно, благодарен, но какой бы скучной ни была
эта книга и пусть мой датчик эмоций сейчас на нуле, я хочу
запомнить то, что здесь написано».
дальше 4 23
как работать с этой книгой
Эта книга для тех, кто хочет учиться.
Как мы что-то узнаем? Сначала нужно это «что-то» понять, а потом не забыть. За-
толкать в голову побольше фактов недостаточно. Согласно новейшим исследовани-
ям в области когнитивистики, нейробиологии и психологии обучения, для усвоения
материала требуется что-то большее, чем простой текст на странице. Мы знаем, как
заставить ваш мозг работать.
Основные принципы серии «Head First»
Наглядность. Графика запоминается лучше, чем обычный текст, и значительно повышает эффективность
восприятия информации (до 89 % по данным исследований). Кроме того, материал становится более
понятным. Текст размещается на рисунках, к которым он относится, а не под ними или на соседней
странице — и вероятность успешного решения задач, относящихся к материалу, повышается вдвое.
Разговорный стиль изложения. Недавние исследования показали, что при разговорном стиле из-
ложения материала (вместо формальных лекций) улучшение результатов на итоговом тестировании
достигает 40 %. Рассказывайте историю, вместо того чтобы читать лекцию. Не относитесь к себе слишком
тельная беседа за столом или лекция?
серьезно. Что привлечет ваше внимание: занима
Активное участие читателя. Пока вы не начнете напрягать извилины, в вашей голове ничего не про-
изойдет. Читатель должен быть заинтересован в результате; он должен решать задачи, формулировать
выводы и овладевать новыми знаниями. А для этого необходимы упражнения и каверзные вопросы,
в решении которых задействованы оба полушария мозга и разные чувства.
Привлечение (и сохранение) внимания читателя. Ситуация, знакомая каждому: «Я очень хочу изу-
транице». Мозг обращает внимание на интересное, странное, притя-
чить это, но засыпаю на первой с
гательное, неожиданное. Изучение сложной технической темы не обязано быть скучным. Интересное
узнается намного быстрее.
Обращение к эмоциям. Известно, что наша способность запоминать в значительной мере зависит от
эмоционального сопереживания. Мы запоминаем то, что нам небезразлично. Мы запоминаем, когда
что-то чувствуем. Нет, сантименты здесь ни при чем: речь идет о таких эмоциях, как удивление, любо-
пытство, интерес и чувство «Да я крут!» при решении задачи, которую окружающие считают сложной,
или когда вы понимаете, что разбираетесь в теме лучше, чем всезнайка Боб из технического отдела.
24 введение
введение
Ìетапоçнание: наука о мûøлении
Как бы теперь
Если вы действительно хотите быстрее и глубже усваивать новые зна-
заставить мой мозг
ния — задумайтесь над тем, как вы думаете. Учитесь учиться.
все это запомнить…
Мало кто из нас изучает теорию метапознания во время учебы. Нам
положено учиться, но нас редко этому учат.
Но раз вы читаете эту книгу, то, вероятно, хотите освоить программи-
рование на Kotlin, и по возможности быстрее. Вы хотите запомнить
прочитанное, а для этого абсолютно необходимо сначала понять про-
читанное.
Чтобы извлечь максимум пользы из учебного процесса, нужно
заставить ваш мозг воспринимать новый материал как Нечто
Важное. Критичное для вашего существования. Такое же важ-
ное, как тигр. Иначе вам предстоит бесконечная борьба с вашим
мозгом, который всеми силами уклоняется от запоминания новой
информации.
Как же УБЕДИТЬ мозг, что язык Kotlin не менее важен,
чем голодный тигр?
Есть способ медленный и скучный, а есть быстрый и эффективный. Пер-
вый основан на тупом повторении. Всем известно, что даже самую скучную
информацию можно запомнить, если повторять ее снова и снова. При достаточ-
ном количестве повторений ваш мозг прикидывает: « Вроде бы несущественно,
но раз одно и то же повторяется столько раз... Ладно, уговорил».
Быстрый способ основан на повышении активности мозга и особенно на
сочетании разных ее видов. Доказано, что все факторы, перечисленные на
предыдущей странице, помогают вашему мозгу работать на вас. Например,
исследования показали, что размещение слов внутри рисунков (а не в подписях,
в основном тексте и т. д.) заставляет мозг анализировать связи между текстом
и графикой, а это приводит к активизации большего количества нейронов.
Больше нейронов — выше вероятность того, что информация будет сочтена
важной и достойной запоминания.
Разговорный стиль тоже важен: обычно люди проявляют больше внимания,
когда они участвуют в разговоре, так как им приходится следить за ходом беседы
и высказывать свое мнение. Причем мозг совершенно не интересует, что вы
«разговариваете» с книгой! С другой стороны, если текст сух и формален, то
мозг чувствует то же, что чувствуете вы на скучной лекции в роли пассивного
участника. Его клонит в сон.
Но рисунки и разговорный стиль — это только начало.
дальше 4 25
как работать с этой книгой
Вот ÷то сделали ÌЫ
Мы использовали рисунки, потому что мозг лучше приспособлен для восприятия графики,
чем текста. С точки зрения мозга рисунок стоит тысячи слов. А когда текст комбинирует-
ся с графикой, мы внедряем текст прямо в рисунки, потому что мозг при этом работает
эффективнее.
Мы используем избыточность: повторяем одно и то же несколько раз, применяя разные
средства передачи информации, обращаемся к разным чувствам — и все для повышения
вероятности того, что материал будет закодирован в нескольких областях вашего мозга.
Мы используем концепции и рисунки несколько неожиданным образом, потому что мозг
лучше воспринимает новую информацию. Кроме того, рисунки и идеи обычно имеют эмо-
циональное содержание, потому что мозг обращает внимание на биохимию эмоций. То, что
заставляет нас чувствовать, лучше запоминается — будь то шутка, удивление или интерес.
Мы используем разговорный стиль, потому что мозг лучше воспринимает информацию,
когда вы участвуете в разговоре, а не пассивно слушаете лекцию. Это происходит и при
чтении.
В книгу включены многочисленные упражнения, потому что мозг лучше запоминает, когда
вы что-то делаете. Мы постарались сделать их непростыми, но интересными — то, что
предпочитает большинство читателей.
Мы совместили несколько стилей обучения, потому что одни читатели предпочитают по-
шаговые описания, другие стремятся сначала представить «общую картину», а третьим
хватает фрагмента кода. Независимо от ваших личных предпочтений полезно видеть
несколько вариантов представления одного материала.
Мы постарались задействовать оба полушария вашего мозга; это повышает вероятность
усвоения материала. Пока одна сторона мозга работает, другая часто имеет возможность
отдохнуть; это повышает эффективность обучения в течение продолжительного времени.
А еще в книгу включены истории и упражнения, отражающие другие точки зрения. Мозг
глубже усваивает информацию, когда ему приходится оценивать и выносить суждения.
В книге часто встречаются вопросы, на которые не всегда можно дать простой ответ, потому
что мозг быстрее учится и запоминает, когда ему приходится что-то делать. Невозможно
накачать мышцы, наблюдая за тем, как занимаются другие. Однако мы позаботились о том, чтобы усилия читателей были приложены в верном направлении. Вам не придется ломать
голову над невразумительными примерами или разбираться в сложном, перенасыщенном
техническим жаргоном или слишком лаконичном тексте.
В историях, примерах, на картинках используются люди — потому что вы тоже человек.
И ваш мозг обращает на людей больше внимания, чем на неодушевленные предметы.
26 введение
введение
×то моæете сделатü ВЫ, ÷тобû
çаставитü свой моçг повиноватüся
Мы свое дело сделали. Остальное за вами. Эти советы станут
отправной точкой; прислушайтесь к своему мозгу и опреде-
лите, что вам подходит, а что не подходит. Пробуйте новое.
Вырежьте и прикрепите
на холодильник.
1 Не торопитесь. Чем больше вы поймете, тем
6 Пейте воду. И побольше.
меньше придется запоминать.
Мозг лучше всего работает в условиях высокой
Просто читать недостаточно. Когда книга за-
влажности. Дегидратация (которая может насту-
дает вам вопрос, не переходите к ответу. Пред-
пить еще до того, как вы почувствуете жажду)
ставьте, что кто-то действительно задает вам
снижает когнитивные функции.
вопрос. Чем глубже ваш мозг будет мыслить,
7 Прислушивайтесь к своему мозгу.
тем скорее вы поймете и запомните материал.
Следите за тем, когда ваш мозг начинает уста-
вать. Если вы начинаете поверхностно воспри-
2 Выполняйте упражнения, делайте заметки.
нимать материал или забываете только что
Мы включили упражнения в книгу, но выпол-
прочитанное, пора сделать перерыв.
нять их за вас не собираемся. И не разглядывай-
8 Чувствуйте!
те упражнения. Берите карандаш и пишите.
Ваш мозг должен знать, что материал книги
Физические действия во время учения повыша-
действительно важен. Переживайте за героев
ют его эффективность.
наших историй. Придумывайте собственные
подписи к фотографиям. Поморщиться над
3 Читайте врезки.
неудачной шуткой все равно лучше, чем не по-
Это значит: читайте всё. Врезки — часть основ-
чувствовать ничего.
ного материала! Не пропускайте их.
9 Пишите побольше кода!
Освоить программирование Kotlin можно толь-
4 Не читайте другие книги после этой перед сном.
ко одним способом: писать побольше кода.
Именно этим мы и будем заниматься в книге.
Часть обучения (особенно перенос информации
Программирование — искусство, и добиться