Главная страница

Scala. Профессиональное программирование 2022. Одерски Мартин, Спун Лекс, Веннерс Билл, Соммерс ФрэнкО41 Scala. Профессиональное программирование. 5е изд спб. Питер, 2022. 608 с. ил. Серия Библиотека программиста


Скачать 6.24 Mb.
НазваниеОдерски Мартин, Спун Лекс, Веннерс Билл, Соммерс ФрэнкО41 Scala. Профессиональное программирование. 5е изд спб. Питер, 2022. 608 с. ил. Серия Библиотека программиста
Дата27.04.2023
Размер6.24 Mb.
Формат файлаpdf
Имя файлаScala. Профессиональное программирование 2022.pdf
ТипДокументы
#1094967
страница4 из 64
1   2   3   4   5   6   7   8   9   ...   64
28 Благодарности
Wadler), Джейми Уэбб (Jamie Webb), Джон Уильямс (John Williams), Кевин
Райт (Kevin Wright) и Джейсон Зауг (Jason Zaugg). Очень полезные отзывы, которые помогли нам улучшить язык и его инструментальные средства, были получены от людей, подписанных на наши рассылки по Scala.
Джордж Бергер (George Berger) усердно работал над тем, чтобы процесс создания и размещения книги в интернете протекал гладко. Как результат, в данном проекте не было никаких технических сбоев.
Ценные отзывы о начальных вариантах текста книги были получены нами от многих людей. Наших благодарностей заслуживают Эрик Армстронг
(Eric Armstrong), Джордж Бергер (George Berger), Алекс Блевитт (Alex
Blewitt), Гилад Браха (Gilad Bracha), Уильям Кук (William Cook), Брюс
Экель (Bruce Eckel), Стефан Мишель (St
éphane Micheloud), Тод Миль­
штейн (Todd Millstein), Дэвид Поллак (David Pollak), Филип Уодлер (Philip
Wadler) и Матиас Зенгер (Matthias Zenger). Спасибо также представителям
Silicon Valley Patterns group за их весьма полезный обзор. Это Дейв Астелс
(Dave Astels), Трейси Бялик (Tracy Bialik), Джон Брюер (John Brewer),
Эндрю Чейз (Andrew Chase), Брэдфорд Кросс (Bradford Cross), Рауль Дюк
(Raoul Duke), Джон П. Эйрих (John P. Eurich), Стивен Ганц (Steven Ganz),
Фил Гудвин (Phil Goodwin), Ральф Йочем (Ralph Jocham), Ян­Фа Ли (Yan­
Fa Li), Тао Ма (Tao Ma), Джеффри Миллер (Jeffery Miller), Суреш Пай
(Suresh Pai), Русс Руфер (Russ Rufer), Дэйв У. Смит (Dave W. Smith), Скотт
Торнквест (Scott Turnquest), Вальтер Ваннини (Walter Vannini), Дарлин
Уоллах (Darlene Wallach) и Джонатан Эндрю Уолтер (Jonathan Andrew
Wolter). Кроме того, хочется поблагодарить Дуэйна Джонсона (Dewayne
Johnson) и Кима Лиди (Kim Leedy) за помощь в художественном оформле­
нии обложки, а также Фрэнка Соммерса (Frank Sommers) — за работу над алфавитным указателем.
Хотелось бы выразить особую благодарность и всем нашим читателям, при­
славшим комментарии. Они нам очень пригодились для повышения качества книги. Мы не в состоянии опубликовать имена всех приславших комментарии, но объявим имена тех читателей, кто прислал не менее пяти комментариев на стадии eBook PrePrint

. Отсортируем их имена по убыванию количества ком­
ментариев. Наших благодарностей заслуживают Дэвид Бизак (David Biesack),
Дон Стефан (Donn Stephan), Матс Хенриксон (Mats Henricson), Роб Диккенс
(Rob Dickens), Блэр Захак (Blair Zajac), Тони Слоан (Tony Sloane), Найджел
Харрисон (Nigel Harrison), Хавьер Диас Сото (Javier Diaz Soto), Уильям Хе­
лан (William Heelan), Джастин Фурдер (Justin Forder), Грегор Перди (Gregor
Purdy), Колин Перкинс (Colin Perkins), Бьярте С. Карлсен (Bjarte S. Karlsen),
Эрвин Варга (Ervin Varga), Эрик Уиллигерс (Eric Willigers), Марк Хейс (Mark
Hayes), Мартин Элвин (Martin Elwin), Калум Маклин (Calum MacLean), Джо­

Благодарности 29
натан Уолтер (Jonathan Wolter), Лес Прушински (Les Pruszynski), Сет Тисуе
(Seth Tisue), Андрей Формига (Andrei Formiga), Дмитрий Григорьев (Dmitry
Grigoriev), Джордж Бергер (George Berger), Говард Ловетт (Howard Lovatt),
Джон П. Эйрих (John P. Eurich), Мариус Скуртеску (Marius Scurtescu),
Джефф Эрвин (Jeff Ervin), Джейми Уэбб (Jamie Webb), Курт Зольман (Kurt
Zoglmann), Дин Уэмплер (Dean Wampler), Николай Линдберг (Nikolaj
Lindberg), Питер Маклейн (Peter McLain), Аркадиуш Стрыйски (Arkadiusz
Stryjski), Шанки Сурана (Shanky Surana), Крейг Борделон (Craig Bordelon),
Александр Пэтри (Alexandre Patry), Филип Моэнс (Filip Moens), Фред Янон
(Fred Janon), Джефф Хеон (Jeff Heon), Борис Лорбир (Boris Lorbeer), Джим
Менард (Jim Menard), Тим Аццопарди (Tim Azzopardi), Томас Юнг (Thomas
Jung), Уолтер Чанг (Walter Chang), Йерун Дийкмейер (Jeroen Dijkmeijer),
Кейси Боумен (Casey Bowman), Мартин Смит (Martin Smith), Ричард Даллау­
эй (Richard Dallaway), Энтони Стаббс (Antony Stubbs), Ларс Вестергрен (Lars
Westergren), Маартен Хэйзвинкель (Maarten Hazewinkel), Мэтт Рассел (Matt
Russell), Ремигиус Михаловски (Remigiusz Michalowski), Андрей Толопко
(Andrew Tolopko), Кертис Стэнфорд (Curtis Stanford), Джошуа Каф (Joshua
Cough), Земен Денг (Zemian Deng), Кристофер Родригес Масиас (Christopher
Rodrigues Macias), Хуан Мигель Гарсия Лопес (Juan Miguel Garcia Lopez),
Мишель Шинц (Michel Schinz), Питер Мур (Peter Moore), Рэндольф Кал
(Randolph Kahle), Владимир Кельман (Vladimir Kelman), Даниэль Гронау
(Daniel Gronau), Дирк Детеринг (Dirk Detering), Хироаки Накамура (Hiroaki
Nakamura), Оле Хугаард (Ole Hougaard), Бхаскар Маддала (Bhaskar Maddala),
Дэвид Бернар (David Bernard), Дерек Махар (Derek Mahar), Джордж Кол­
лиас (George Kollias), Кристиан Нордал (Kristian Nordal), Нормен Мюллер
(Normen Mueller), Рафаэль Феррейра (Rafael Ferreira), Бинил Томас (Binil
Thomas), Джон Нильсон (John Nilsson), Хорхе Ортис (Jorge Ortiz), Маркус
Шульте (Marcus Schulte), Вадим Герасимов (Vadim Gerasimov), Кэмерон
Таггарт (Cameron Taggart), Джон­Андерс Тейген (Jon­Anders Teigen), Силь­
вестр Забала (Silvestre Zabala), Уилл Маккуин (Will McQueen) и Сэм Оуэн
(Sam Owen).
Хочется также сказать спасибо тем, кто отправил сообщения о замеченных неточностях после публикации первых двух изданий. Это Феликс Зигрист
(Felix Siegrist), Лотар Мейер­Лербс (Lothar Meyer­Lerbs), Диетард Михаэ­
лис (Diethard Michaelis), Рошан Даврани (Roshan Dawrani), Донн Стефан
(Donn Stephan), Уильям Утер (William Uther), Франсиско Ревербель
(Francisco Reverbel), Джим Балтер (Jim Balter), Фрик де Брюйн (Freek de
Bruijn), Амброз Лэнг (Ambrose Laing), Сехар Прабхала (Sekhar Prabhala),
Левон Салдамли (Levon Saldamli), Эндрю Бурсавич (Andrew Bursavich),
Хьялмар Петерс (Hjalmar Peters), Томас Фер (Thomas Fehr), Ален О’Ди
(Alain O’Dea), Роб Диккенс (Rob Dickens), Тим Тейлор (Tim Taylor),

30 Благодарности
Кристиан Штернагель (Christian Sternagel), Мишель Паризьен (Michel
Parisien), Джоэл Нили (Joel Neely), Брайан Маккеон (Brian McKeon),
Томас Фер (Thomas Fehr), Джозеф Эллиотт (Joseph Elliott), Габриэль да Силва Рибейро (Gabriel da Silva Ribeiro), Томас Фер (Thomas Fehr),
Пабло Рипольес (Pablo Ripolles), Дуглас Гейлор (Douglas Gaylor), Кевин
Сквайр (Kevin Squire), Гарри­Антон Талвик (Harry­Anton Talvik), Кри­
стофер Симпкинс (Christopher Simpkins), Мартин Витман­Функ (Martin
Witmann­Funk), Джим Балтер (Jim Balter), Питер Фостер (Peter Foster),
Крейг Бордолон (Craig Bordelon), Хайнц­Питер Гум (Heinz­Peter Gumm),
Питер Чапин (Peter Chapin), Кевин Райт (Kevin Wright), Анантан Сри­
нивасан (Ananthan Srinivasan), Омар Килани (Omar Kilani), Дон Стефан
(Donn Stephan), Гюнтер Ваффлер (Guenther Waffler).
Лекс хотел бы поблагодарить специалистов, среди которых Аарон Абрамс
(Aaron Abrams), Джейсон Адамс (Jason Adams), Генри и Эмили Крутчер
(Henry and Emily Crutcher), Джои Гибсон (Joey Gibson), Гунар Хиллерт
(Gunnar Hillert), Мэтью Линк (Matthew Link), Тоби Рейлтс (Toby Reyelts),
Джейсон Снейп (Jason Snape), Джон и Мелинда Уэзерс (John and Melinda
Weathers), и всех представителей Atlanta Scala Enthusiasts за множество по­
лезных обсуждений структуры языка, его математических основ и способов представления языка Scala специалистам­практикам.
Особую благодарность хочется выразить Дэйву Брикчетти (Dave Briccetti) и Адриану Мурсу (Adriaan Moors) за рецензирование третьего издания, а также Маркони Ланна (Marconi Lanna) не только за рецензирование, но и за мотивацию выпустить третье издание, которая возникла после разговора о новинках, появившихся со времени выхода предыдущего издания.
Билл хотел бы поблагодарить нескольких специалистов за предоставленную информацию и советы по изданию книги. Его благодарность заслужили Гэри
Корнелл (Gary Cornell), Грег Доенч (Greg Doench), Энди Хант (Andy Hunt),
Майк Леонард (Mike Leonard), Тайлер Ортман (Tyler Ortman), Билл Поллок
(Bill Pollock), Дейв Томас (Dave Thomas) и Адам Райт (Adam Wright). Билл также хотел бы поблагодарить Дика Уолла (Dick Wall) за сотрудничество над разработкой нашего курса Stairway to Scala, который большей частью осно­
вывался на материалах, вошедших в эту книгу. Наш многолетний опыт пре­
подавания курса Stairway to Scala помог повысить его качество. И наконец,
Билл хотел бы выразить благодарность Дарлин Грюндль (Darlene Gruendl) и Саманте Вулф (Samantha Woolf) за помощь в завершении третьего издания.
Наконец, мы хотели бы поблагодарить Жюльена Ричарда­Фоя (Julien Ri­
chard­Foy) за работу над обновлением четвертого издания этой книги до версии Scala 2.13, в частности за перепроектирование библиотеки коллекций.

Введение
Эта книга — руководство по Scala, созданное людьми, непосредственно за­
нимающимися разработкой данного языка программирования. Нашей целью было научить вас всему, что необходимо для превращения в продуктивного программиста на языке Scala. Все примеры в книге компилируются с по­
мощью Scala версии 3.0.0
Целевая аудитория
Книга в основном рассчитана на программистов, желающих научиться про­
граммировать на Scala. Если у вас есть желание создать свой следующий проект на этом языке, то наша книга вам подходит. Кроме того, она должна заинтересовать программистов, которые хотят расширить кругозор, изучив новые концепции. Если вы, к примеру, программируете на Java, то эта книга раскроет для вас множество концепций функционального программирования, а также передовых идей из сферы объектно­ориентированного программиро­
вания. Мы уверены: изучение Scala и заложенных в этот язык идей поможет вам повысить свой профессиональный уровень как программиста. Предпола­
гается, что вы уже владеете общими знаниями в области программирования.
Scala вполне подходит на роль первого изучаемого языка, однако это не та книга, которая может использоваться для обучения программированию. В то же время вам не нужно быть каким­то особенным знатоком языков програм­
мирования. Большинство людей использует Scala на платформе Java, однако наша книга не предполагает, что вы тесно знакомы с языком Java. Но все же мы ожидаем, что Java известен многим читателям, и поэтому иногда сравни­
ваем оба языка, чтобы помочь таким читателям понять разницу.
Как пользоваться книгой
Книгу рекомендуется читать в порядке следования глав, от начала до конца.
Мы очень старались в каждой главе вводить читателя в курс только одной

32 Введение темы и объяснять новый материал лишь в понятиях из ранее рассмотренных тем. Поэтому если перескочить вперед, чтобы поскорее в чем­то разобраться, то можно встретить объяснения, в которых используются еще непонятные концепции. Мы считаем, что получать знания в области программирования на Scala лучше постепенно, читая главы в порядке их следования.
Встретив незнакомое понятие, можно обратиться к глоссарию. Многие чи­
татели бегло просматривают части книги, и это вполне нормально. Но при встрече с непонятными терминами можно выяснить, что просмотр был слишком поверхностным, и вернуться к справочным материалам.
Прочитав книгу, вы можете в дальнейшем использовать ее в качестве спра­
вочника по Scala. Конечно, существует официальная спецификация языка, но в ней прослеживается стремление к точности в ущерб удобству чтения.
В нашем издании не охвачены абсолютно все подробности Scala, но его осо­
бенности изложены в нем вполне обстоятельно. Так что по мере освоения программирования на этом языке издание вполне может стать доступным справочником.
Как изучать Scala
Весьма обширные познания о Scala можно получить, просто прочитав книгу от начала до конца. Но быстрее и основательнее освоить язык можно с по­
мощью ряда дополнительных действий.
Прежде всего можно воспользоваться множеством примеров программ, включенных в эту книгу. Самостоятельно набирая их, вам придется вду­
мываться в каждую строку кода. Попытки его разнообразить позволят вам глубже заинтересоваться изучаемой темой и убедиться в том, что вы дей­
ствительно поняли, как работает этот код.
Затем можно поучаствовать в работе множества онлайн­форумов. Это по­
зволит вам и многим другим приверженцам Scala помочь друг другу в его освоении. Есть множество рассылок, дискуссионных форумов, чатов, вики­
источников и несколько информационных каналов, которые посвящены этому языку и содержат соответствующие публикации. Уделите время по­
иску источников информации, более всего отвечающих вашим запросам.
Вы будете гораздо быстрее решать мелкие проблемы, что позволит уделять больше времени более серьезным и глубоким вопросам.
И наконец, получив при чтении книги достаточный объем знаний, присту­
пайте к разработке собственного проекта. Поработайте с нуля над созданием

Структура книги 33
какой­нибудь небольшой программы или разработайте дополнение к более объемной. Вы не добьетесь быстрых результатов одним только чтением.
Условные обозначения
При первом упоминании какого­либо понятия или термина его название дается курсивом. Для небольших встроенных в текст примеров кода, таких как x
+
1
, используется моноширинный шрифт. Большие примеры кода представлены в виде отдельных блоков, для которых тоже используется моноширинный шрифт:
def hello() =
println("Hello, world!")
Когда показывается работа с интерактивной оболочкой, ответы последней выделяются шрифтом на сером фоне:
scala> 3 + 4
val res0: Int = 7
Структура книги z
z
Глава 1 «Масштабируемый язык» представляет обзор структуры языка
Scala, а также ее логическое обоснование и историю.
z z
Глава 2 «Первые шаги в Scala» показывает, как в языке выполняется ряд основных задач программирования, не вдаваясь в подробности, касающиеся особенностей работы механизмов языка. Цель этой гла­
вы — заставить ваши пальцы набирать и запускать код на Scala.
z z
Глава 3 «Дальнейшие шаги в Scala» показывает ряд основных задач программирования, помогающих ускорить освоение этого языка. Из­
учив данную главу, вы сможете использовать Scala для автоматизации простых задач.
z z
Глава 4 «Классы и объекты» закладывает начало углубленного рас­
смотрения языка Scala, приводит описание его основных объектно­
ориентированных строительных блоков и указания по выполнению компиляции и запуску приложений Scala.
z z
Глава 5 «Основные типы и операции» охватывает основные типы
Scala, их литералы, операции, которые могут над ними проводиться,

34 Введение вопросы работы уровней приоритета и ассоциативности и дает пред­
ставление об обогащающих оболочках.
z z
Глава 6 «Функциональные объекты» углубляет представление об объектно­ориентированных свойствах Scala, используя в качестве при­
мера функциональные (то есть неизменяемые) рациональные числа.
z z
Глава 7 «Встроенные управляющие конструкции» показывает способы использования таких конструкций Scala, как if
, while
, for
, try и match z
z
Глава 8 «Функции и замыкания» углубленно рассматривает функции как основные строительные блоки функциональных языков.
z z
Глава 9 «Управляющие абстракции» показывает, как усовершенство­
вать основные управляющие конструкции Scala с помощью определе­
ния собственных управляющих абстракций.
z z
Глава 10 «Композиция и наследование» рассматривает имеющуюся в Scala дополнительную поддержку объектно­ориентированного про­
граммирования. Затрагиваемые темы не столь фундаментальны, как те, что излагались в главе 4, но вопросы, которые в них рассматрива­
ются, часто встречаются на практике.
z z
Глава 11 «Трейты» охватывает существующий в Scala механизм соз­
дания композиции примесей. Показана работа трейтов, описываются примеры их наиболее частого использования, и объясняется, как с помощью трейтов совершенствуется традиционное множественное наследование.
z z
Глава 12 «Пакеты, импорты и экспорты» рассматривает вопросы про­
граммирования в целом, включая высокоуровневые пакеты, инструк­
ции импортирования и модификаторы управления доступом, такие как protected и private z
z
Глава 13 «Сопоставление с образцом» описывает двойные конструк­
ции, которые помогут вам при написании обычных, неинкапсулиро­
ванных структур данных. Классы регистра и сопоставление с образцом особенно полезны для древовидных рекурсивных данных.
z z
Глава 14 «Работа со списками» подробно рассматривает списки, кото­
рые, вероятно, можно отнести к самым востребованным структурам данных в программах на Scala.
z z
Глава 15 «Работа с другими коллекциями» показывает способы ис­
пользования основных коллекций Scala, таких как списки, массивы, кортежи, множества и отображения.

Ресурсы 35
z z
Глава 16 «Изменяемые объекты» объясняет суть изменяемых объектов и синтаксиса для выражения этих объектов, обеспечиваемого Scala.
Глава завершается практическим примером моделирования дискрет­
ного события, в котором показан ряд изменяемых объектов в действии.
z z
Глава 17 «Иерархия Scala» объясняет иерархию наследования языка и рассматривает универсальные методы и низшие типы.
z z
Глава 18 «Параметризация типов» объясняет некоторые методы со­
крытия информации, представленные в главе 13, на конкретном при­
мере: конструкции класса для чисто функциональных очередей. Глава строится на описании вариации параметров типа и того, как она вза­
имодействует с сокрытием информации.
z z
Глава 19 «Перечисления» вводит двойные конструкции, которые по­
могут вам при написании обычных, неинкапсулированных структур данных.
z z
Глава 20 «Абстрактные члены» дает описание всех видов абстрактных членов, поддерживаемых Scala, — не только методов, но и полей и ти­
пов, которые можно объявлять абстрактными.
z z
Глава 21 «Гивены» описывает функцию Scala, которая помогает вам работать с контекстными параметрами функций. Передача всей кон­
текстной информации проста, но может потребовать большого коли­
чества шаблонов. Гивены позволят вам упростить эту задачу.
z z
Глава 22 «Методы расширения» описывает механизм Scala, позволя­
ющий создать впечатление, что функция определена как метод в клас­
се, хотя на самом деле она определена вне класса.
z z
Глава 23 «Классы типов» (которую еще предстоит написать). В этой главе будет проиллюстрировано несколько примеров классов типов.
z z
Глава 24 «Углубленное изучение коллекций» предлагает углубленный обзор библиотеки коллекций.
z z
Глава 25 «Утверждения и тесты» демонстрирует механизм утвер­
ждения Scala и дает обзор нескольких инструментов, доступных для написания тестов на Scala, уделяя особое внимание ScalaTest.
Ресурсы
На https://www .scala-lang .org
— официальном сайте Scala — вы найдете по­
следнюю версию Scala и ссылки на документацию и ресурсы сообщества.

1   2   3   4   5   6   7   8   9   ...   64


написать администратору сайта