Основы Dart - Станислав Чернышев - E-Book

Основы Dart E-Book

Станислав Чернышев

0,0

Beschreibung

Книга «Основы Dart» адресована тем, кто интересуется этим удивительным языком программирования. Вы узнаете об истории создания, синтаксисе и особенностях языка, таких как встроенные типы данных, и многом другом. В главе 2 вас ждет проект, который будет изменяться и расти вместе с вашими знаниями и навыками, а к главе 6 преобразится в полноценное клиент-серверное приложение. После каждой новой итерации проекта, вас будут ждать предложения по внесению изменений в его кодовую базу, что позволит прокачать свои hard-скиллы. Исходный код рассматриваемых в книге примеров можно найти в GitHub-репозитории автора (весь код в книге соответствует Dart 3.4).

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 596

Veröffentlichungsjahr: 2024

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Станислав Чернышев

Основы Dart. — СПб.: Питер, 2024.

ISBN 978-5-4461-4168-5

© ООО Издательство "Питер", 2024

Оглавление

Предисловие от автора
Предисловие от Friflex
От издательства
Глава 1. Краткая история Dart и встроенные типы данных
1.1. Краткая история и основные особенности Dart
1.2. Установка и настройка рабочей среды
1.3. Правила именования
1.4. Встроенные типы данных Dart
1.5. Модификаторы final, const и late
1.6. Null-безопасность (null-safety)
1.7. Тип данных dynamic vs Object
1.8. Чтение данных с клавиатуры
Резюме
Вопросы для самопроверки
Глава 2. Операторы, сопоставление с шаблоном и управляющие конструкции
2.1. Основные операторы Dart
2.2. Что такое сопоставление с шаблоном и деструктурирование
2.3. Управление потоком выполнения кода
Проект: игра «Крестики-нолики» v.0
Резюме
Вопросы для самопроверки
Глава 3. Функции, библиотеки, пакеты и их тестирование
3.1. Функции в Dart
3.2. Создание и импортирование библиотек
3.3. Тестирование функций
3.4. Создание пакета и его подключение к проекту
Проект: игра «Крестики-нолики» v.1
Резюме
Вопросы для самопроверки
Глава 4. Объектно-ориентированное программирование
4.1. Конструктор класса
4.2. Статические переменные и методы класса
4.3. Перегрузка операторов
4.4. Методы расширения
4.5. Наследование и переопределение методов
4.6. Абстрактный класс и интерфейс
4.7. Продвижение приватных полей
4.8. Модификаторы класса
4.9. Дженерики (generics)
4.10. Перечисления (enum)
4.11. Расширение типа (extension types)
4.12. Исключения (exceptions)
4.13. Тестирование классов
Проект: игра «Крестики-нолики» v.2
Резюме
Вопросы для самопроверки
Глава 5. Сборка приложения. Работа с файлами и каталогами
5.1. Сборка приложения
5.2. Конфигурация запускаемого приложения
5.3. Работа с файлами
5.4. Работа с каталогами
5.5. База данных на основе файла и однонаправленного списка
5.6. Работа с JSON-файлами
5.7. Простая БД по типу «ключ:значение» в формате JSON
Проект: игра «Крестики-нолики» v.3
Резюме
Вопросы для самопроверки
Глава 6. Асинхронное и сетевое программирование. Изолят
6.1. Архитектура цикла событий в Dart
6.2. Асинхронное программирование
6.3. Изоляты (isolate)
6.4. Тонкости работы с изоляционными группами
6.5. Async или Isolate
6.6. Зоны (zones)
6.7. Сетевое программирование
Проект: игра «Крестики-нолики» v.4
Резюме
Вопросы для самопроверки
Глава 7. Алгоритмы, структуры данных на Dart и встроенные коллекции
7.1. Структуры данных
7.2. Алгоритмы сортировки
7.3. Алгоритмы поиска
7.4. Встроенные коллекции Dart
Резюме
Вопросы для самопроверки
Глава 8. Интероперабельность в Dart
8.1. Интерфейс внешних функций
8.2. Нативные типы данных Cи и их аналоги в Dart
8.3. Перенос функции на нативный уровень
8.4. Автогенерация кода для подключения библиотеки
8.5. Вызов функции обратного вызова Dart из Си
8.6. Связывание структур Cи с Dart и их финализация
Резюме
Вопросы для самопроверки
Курсы автора на stepik.org
Список используемых источников
Рекомендуем прочитать

Выражаю огромную благодарность моей жене и дочери, компании Friflex, Кириллу Розову и Алексею Гладкову, ученикам кооперации «Пафос и превозмогание!!!», а также всем, кто поддержал актуализацию предыдущей книги по основам Dart как финансово, так и морально!

Предисловие от автора

Добрый день! Меня зовут Станислав Чернышев, я автор данной книги и канала MADTeacher на YouTube. Моя основная деятельность — наука, преподавание и совместное с учениками выполнение различных проектов на заказ.

Опыт в IT — более десяти лет: работа в сфере ВПК, разработка различных проектов на заказ, управление командой разработчиков, пара выгораний и, само собой, преподавание. Мне нравится обучать, и, чего уж там скрывать, я просто в бешенстве от сложившейся ситуации в сфере образования…

Эта книга — один из маленьких шагов в попытке изменить чашу весов таким образом, чтобы мои ученики и студенты выходили на рынок труда с актуальным набором компетенций. Если вы не относитесь к числу таких людей, то, скорее всего, уже успели начать свою карьеру в IT или только планируете «захват мира» ^_^. Очень надеюсь, что книга поможет вам в этом и предоставит объем знаний, необходимый для изучения новой технологии.

Что касается исходных кодов рассматриваемых в книге примеров, то их можно скачать из моего GitHub-репозитория: https://github.com/MADTeacher/dart_basics_paper_book.

По поводу найденных опечаток, ошибок и тому подобного просьба писать на почту (см. ниже) либо сообщить через группу в VK:

[email protected]

https://vk.com/madteacher

@_MADTeacher

MADTeacher

Предисловие от Friflex

Компания Friflex выступила партнером выпуска книги Станислава Чернышева об основах языка Dart. Мы уверены, что она поможет разработчикам познакомиться с языком Dart, который является фундаментом популярного фреймворка для кроссплатформенной разработки Flutter. Friflex была одной из первых компаний на российском рынке, которая сделала выбор в пользу разработки на Flutter. И мы не разочаровались во фреймворке. За годы работы на рынке мы создали решения для высоконагруженных сервисов с миллионами пользователей, а команда Flutter-разработчиков Friflex сейчас одна из самых больших в России. Мы тесно сотрудничаем с Открытой мобильной платформой по развитию совместимости ОС Аврора и Flutter и также первыми портировали Flutter-приложение на ОС Аврора.

Со стремлением развивать рынок и сообщество мы создали CrossConf — крупнейшую конференцию по кроссплатформенной разработке и трендам в IT, которую проводим каждую осень. Там мы и познакомились со Станиславом Чернышевым.

Доклад Станислава был про Dart в задачах мультиагентного моделирования, и он получил очень высокую оценку от аудитории. CrossConf объединяет сообщество, знакомит с энтузиастами, профессионалами индустрии, и знакомство со Станиславом — один из таких примеров.

Мы видим большое будущее у разработки на Flutter. Этот фреймворк становится все более востребованным, благодаря своей гибкости и масштабируемости он позволяет реализовывать сложные проекты. Мы рады делать все, чтобы в сообществе разработчиков интерес к Flutter и Dart усиливался. Желаем успехов в освоении Dart!

Петр Чернышев, CEO Friflex, глава оргкомитета CrossConf

Для всех читателей книги «Основы Dart» по промокоду DARTBOOK будет действовать скидка 10 % на билеты на IT-конференцию CrossConf.

О новых IT-продуктах на фреймворке Flutter пишем в телеграм-канале Friflex. Подписывайтесь!

https://t.me/friflex_com

От издательства

Мы выражаем огромную благодарность компании Friflex за помощь в работе над книгой и их вклад в популяризацию языка программирования Dart.

Книга содержит множество примеров исходного кода как в нумерованных лис­тингах, так и в тексте. В обоих случаях исходный код оформлен моноширинным шрифтом, в отличие от обычного текста, а места, требующие дополнительного внимания, выделены полужирным шрифтом.

Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

Глава 1. Краткая история Dart и встроенные типы данных

1.1. Краткая история и основные особенности Dart

Dart — объектно-ориентированный язык программирования с сильной статической типизацией и поддержкой обобщенного программирования (шаблоны/дженерики) [1]. Он не поддерживает множественное наследование, то есть родителем производного класса может выступать только один базовый. В то же время, как и в языке программирования Java или C#, класс может реализовывать множество интерфейсов. По синтаксису Dart очень похож на семейство языков Си: C++, C#, Java, Kotlin и т.д.

Dart — молодой язык программирования. Впервые он был анонсирован корпорацией Google 10 октября 2011 года. Первая версия языка увидела свет в ноябре 2013-го, а начиная со второй, 2.12 (март 2021 года), Dart поддерживает null-безопасность (null-safety). В ее основе лежат следующие принципы проектирования [2].

• По умолчанию не допускается значение null. Если не указывается явно, что переменная может иметь значение null, то Dart будет выдавать ошибки на этапе компиляции при присвоении такой переменной значения null.

• Использование null-безопасности позволяет оптимизировать компилятор. Уменьшается не только количество ошибок, связанных с присвоением null, но и объем скомпилированного приложения, а также повышается скорость его выполнения.

Десятого мая 2023 года вышла третья версия языка (в книге используется Dart 3.4). Она вызвала бурю негодования, так как разработчики пошли по пути усложнения и, помимо интересных возможностей а-ля сопоставление шаблонов (pattern matching), switch-выражений, записи (record) и т.д., расширили количество модификаторов класса. Разработчикам, ранее писавшим на C++, Java, Kotlin, это не доставило проблем, но тем, кто знаком только с Dart, такая ситуация не сулила ничего хорошего. В итоге, кого бы из знакомых я ни спрашивал, все продолжили писать код, будто этих модификаторов не существует, лишь изредка пользуясь некоторыми из них. А саму ситуацию назвали «Ад для джуна», так как у более опытных разработчиков появился инструмент, с помощью которого они могут устроить незабываемое собеседование для стажеров или младших программистов. К тому же с момента анонса Dart 3 прекратилась поддержка всех версий младше Dart 2.12, то есть язык стал полностью null-безопасным.

В момент появления Dart позиционировался Google как язык программирования, призванный заменить JavaScript, что и сыграло с ним довольно злую шутку. Несмотря на изначальный интерес сообщества программистов, его не стали повсеместно использовать, и чаще всего упоминание о нем можно было встретить на форумах при описании pet-проекта. Единственное, что вернуло Dart из колодца забытья, в который он погружался месяц от месяца, — выход первой версии Flutter SDK [3] в конце 2018 года, где Dart занял место основного языка программирования, на котором разработка ведется с помощью Flutter. Сам Flutter представляет собой набор инструментов для разработки приложений с графическим пользовательским интерфейсом различной сложности как для мобильных устройств, так для Интернета и настольных компьютеров. Это связано с тем, что разработка ведется в рамках одной кодовой базы для следующих платформ: iOS, Android, macOS, Windows, Linux и Web. К тому же ООО «Открытая мобильная платформа» анонсировало (https://habr.com/ru/articles/761176/) порт Flutter под отечественную мобильную операционную систему «Аврора».

Таким образом, сейчас Dart — оптимизированный для клиентской части язык программирования, позволяющий вести разработку быстрых приложений на любой платформе. Что особенно полезно при прототипировании.

В основе технологии, которая используется в компиляторе Dart и позволяет запускать пользовательский код, лежит понятие «платформа». Всего выделяется два вида платформ (рис. 1.1).

1. Dart Native. Используется для приложений, разрабатываемых под мобильные устройства и персональные компьютеры с различными типами операционных систем. Сюда входит как виртуальная машина Dart с JIT-компиляцией, так и опережающий компилятор (AOT) для создания машинного кода. Виртуальная машина Dart с JIT-компилятором используется в процессе разработки приложений и предоставляет разработчику возможность горячей перезагрузки приложения (нет необходимости компилировать приложение снова и запускать его), сбора различных метрик в реальном времени и т.д. Когда же приложение готово к развертыванию на целевой платформе или его загрузке в магазин для последующего скачивания пользователем, компилятор Dart AOT обеспечивает опережающую компиляцию в машинный код ARM или x64. Скомпилированный AOT код выполняется внутри среды выполнения Dart, где также присутствует сборщик мусора, в котором применяется подход на основе поколений.

2. Dart Web. Используется для приложений, ориентированных на Интернет. В этом случае также применяются два вида компиляторов Dart. Первый (dartdevc) используется только в процессе разработки, а второй (dart2js) — для окончательной сборки приложения перед его развертыванием. Оба компилятора переводят пользовательский код, написанный на Dart, в JavaScript.

Рис. 1.1. Структура платформы языка программирования Dart (BSD-3-Clause license, https://github.com/dart-lang/sdk)

Dart — однопоточный язык программирования, что накладывает ряд ограничений. Да, есть возможность писать асинхронный код, но привычного по другим языкам класса Thread здесь нет. Вместо него используется понятие «изолят» (isolate). В отличие от обычного потока изоляты не разделяют общую память, а взаимодействовать друг с другом могут с помощью сообщений.

У Dart есть свой менеджер пакетов — pub, который позволяет устанавливать существующие в хранилище пакеты. В большинстве случаев нет надобности взаимодействовать с ним напрямую. Достаточно просто прописать в виде зависимости проекта пакет, который необходимо установить, в файл pubspec.yaml.

Обязательным требованием к запускаемому приложению является наличие функции верхнего уровня main, выступающей в роли точки входа (запуска) для разрабатываемого приложения. При этом аналогично таким языкам программирования, как C++, С#, Java и т.д., каждая команда в коде завершается символом точки с запятой (;).

1.2. Установка и настройка рабочей среды

Для разработки на языке программирования Dart могут использоваться как различные IDE (IntelliJ IDEA, Eclipse), так и редакторы кода (Visual Studio Code, Vim, Emacs) после установки в них соответствующих плагинов/расширений. Кроме того, существует ознакомительный веб-сервис для написания и выполнения кода Dart, располагающийся по адресу https://dartpad.dev.

В книге написание кода будет вестись в Visual Studio Code, который можно скачать по ссылке https://code.visualstudio.com/download.

Далее необходимо скачать Dart SDK под ту операционную систему, которую вы обычно используете. В моем случае это Windows 10 (рис. 1.2): https://dart.dev/get-dart/archive.

Рис. 1.2. Скачиваем архив с текущей стабильной версией Dart SDK

После того как архив с Dart SDK скачался, распакуйте его в удобный для вас каталог. Обычно им выступает корневой каталог диска (C, D, F и т.д.). Теперь необходимо прописать путь до распакованного Dart SDK в переменных средах в переменной Path (рис. 1.3).

Рис. 1.3. Указываем путь до Flutter SDK в переменной Path

Запустите Visual Studio Code, установите расширение Dart (рис. 1.4) и перезапустите приложение.

Рис. 1.4. Установка расширения Dart для VS Code

После перезапуска VS Code создайте новый проект для Dart. Для этого используйте сочетание клавиш Ctrl+Shift+P и введите в появившейся командной строке Dart:NewProject. Данная команда может появиться в списке команд до того, как вы введете ее полностью. В этом случае просто выберите ее из списка (рис. 1.5).

Рис. 1.5. Создание нового проекта

На этом шаге обратите внимание на правый нижний угол приложения. Возможно, оно предложит установить новые зависимости расширения Dart, что не даст с первой попытки создать новый проект. Если такое произошло, то снова повторите предыдущий шаг и в появившемся новом списке выберите Console Application (рис. 1.6).

Рис. 1.6. Создание консольного приложения

Далее необходимо выбрать каталог, в котором будет располагаться консольный проект, и его имя. После успешно проделанных шагов VS Code может спросить вас, доверяете ли вы себе (рис. 1.7).

Рис. 1.7. Добавление создаваемого проекта в Workspace Trust

Если не доверяете, то лучше отложите книгу и забросьте программирование, вам прямой путь в кибербезопасность 😉.

В итоге внешний вид VS Code должен выглядеть примерно так (рис. 1.8).

Рис. 1.8. Созданный проект

Нажав клавишу F5, вы можете запустить код в режиме отладки (debug), а если воспользоваться сочетанием клавиш Ctrl+F5, то код запустится без данного режима. Попробуйте один из этих вариантов. В результате должна появиться консоль с текстом Hello world: 42!.

На данный момент структура каталога проекта должна выглядеть так (рис. 1.9).

Рис. 1.9. Структура каталога проекта

В каталоге bin должен находиться файл с точкой входа в приложение, в котором объявлена функция верхнего уровня main. В каталоге lib принято хранить основной код проекта в виде подключаемого пакета. А в каталоге test находятся файлы с тестовой средой проекта.

В данный момент мы не будем заострять внимание на каталогах lib и test. Откройте файл в каталоге bin и измените в нем код с:

import 'package:hello_world/hello_world.dart' as hello_world;

 

void main(List<String> arguments) {

  print('Hello world: ${hello_world.calculate()}!');

}

на:

void main(List<String> arguments) {

  print('Hello world!');

}

При повторном запуске проекта в терминал должно вывестись Helloworld!.

Прежде чем пуститься во все тяжкие, нужно подстелить соломку. По умолчанию Google собирает некоторую «анонимную» статистику по метрикам и отчетах о сбоях, что может привести к невозможности пользоваться автодополнением кода при отсутствии интернет-соединения. Чаще всего подобная ситуация будет сопровождаться таким уведомлением (рис. 1.10).

Чтобы не быть застигнутыми врасплох, этот инструментарий благих намерений «Большого Брата» можно отключить. Откройте терминал и введите команду:

dart --disable-analytics

Затем нажмите Enter. Если вы сделали все правильно, то в терминале выведется следующее уведомление (рис. 1.11).

Весь последующий код текущей главы написан в функции верхнего уровня main.

Рис. 1.10. Нет подключения к серверу Google

Рис. 1.11. Успешное отключение сбора метрик

1.3. Правила именования

При написании кода на Dart и объявлении переменных, функций, классов и их методов лучше придерживаться следующих рекомендаций.

1. При объявлении переменных, функций и методов классов используется верблюжий регистр, а само название начинается с маленькой буквы (lowerCamelCase). Для логического разделения слов в объявляемой переменной необходимо использовать символ в верхнем регистре: myCatName. Имя же объявляемого класса начинается с большой буквы (UpperCamelCase): DailySchedule.

2. В начале объявляемого имени нельзя использовать числовые значения.

3. Регистр символов имеет значение. Так, varCHECK10; и varcheck10; — две совершенно разные переменные.

4. Не используйте в качестве имен переменных ключевые слова Dart.

5. Если имя переменной, функции и так далее начинается с символа _, то она является приватной (для импортирующего код модуля).