Функционал поиска
Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 104 из 110.
Задание
ЛегкоВ предыдущем уроке вы создали класс Library с функциональностью заимствования и возврата книг. Теперь давайте добавим возможности поиска, чтобы пользователи могли находить книги в коллекции библиотеки.
Вы дополните свой класс Library тремя новыми методами поиска, которые помогут пользователям находить книги:
book.dart: Оставьте существующий классBookбез изменений.user.dart: Оставьте существующий классUserбез изменений.library.dart: Добавьте три метода поиска в классLibrary:searchByTitle(String query)— возвращаетList<Book>, содержащий все книги, название которых содержит строку запроса (без учета регистра)searchByAuthor(String query)— возвращаетList<Book>, содержащий все книги, имя автора которых содержит строку запроса (без учета регистра)getAvailableBooks()— возвращаетList<Book>, содержащий только те книги, которые в данный момент доступны для заимствования
main.dart: Продемонстрируйте функциональность поиска. СоздайтеLibraryи добавьте четыре книги:978-0-13-468599-1,The Pragmatic Programmer,David Thomas978-0-596-51774-8,JavaScript: The Good Parts,Douglas Crockford978-0-13-235088-4,Clean Code,Robert Martin978-0-20-161622-4,The Pragmatic Programmer,Andrew Hunt
U001,Alice) и пусть он возьмет первую книгу. Затем:- Выполните поиск книг с
pragmaticв названии и выведитеTitle search 'pragmatic': X found, где X — это количество найденных книг - Выполните поиск книг автора
davidи выведитеAuthor search 'david': X found - Получите список доступных книг и выведите
Available books: X - Выведите каждую доступную книгу на отдельной строке
Ожидаемый результат:
U001 borrowed "The Pragmatic Programmer"
Title search 'pragmatic': 2 found
Author search 'david': 1 found
Available books: 3
[978-0-596-51774-8] JavaScript: The Good Parts by Douglas Crockford
[978-0-13-235088-4] Clean Code by Robert Martin
[978-0-20-161622-4] The Pragmatic Programmer by Andrew HuntПопробуйте сами
import 'book.dart';
import 'user.dart';
import 'library.dart';
void main() {
// Создать библиотеку
Library library = Library();
// TODO: Добавить четыре книги в библиотеку:
// 1. 978-0-13-468599-1, The Pragmatic Programmer, David Thomas
// 2. 978-0-596-51774-8, JavaScript: The Good Parts, Douglas Crockford
// 3. 978-0-13-235088-4, Clean Code, Robert Martin
// 4. 978-0-20-161622-4, The Pragmatic Programmer, Andrew Hunt
// TODO: Зарегистрировать пользователя (U001, Alice)
// TODO: Пусть пользователь возьмет первую книгу
// TODO: Найти книги с 'pragmatic' в названии
// Вывести: Title search 'pragmatic': X found
// TODO: Найти книги автора 'david'
// Вывести: Author search 'david': X found
// TODO: Получить доступные книги и вывести: Available books: X
// TODO: Вывести каждую доступную книгу на отдельной строке
}
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыБиблиотеки и импортВведение в ООПКлассы и объектыКлючевое слово thisМетодыПеременные экземпляраОсновы конструкторовИтоги — Простой калькулятор4Null-безопасность
Введение в Null-безопасностьNullable и Non-Nullable типыОператоры ? и !Ключевое слово Late и Null-безопасностьNull-aware операторыNull-безопасность в классахИтоги — Система профилей пользователей7Абстрактные классы и интерфейсы
Абстрактные классыАбстрактные методыИнтерфейсы в DartНеявные интерфейсыРеализация против наследованияМножественные интерфейсыИтоги — Калькулятор фигур10Коллекции и обобщения
Обзор List, Set, MapТипобезопасные коллекцииОбобщенные классыОбобщенные методыОграничения обобщенийIterable и IteratorИтоги: Обобщенное хранилище13Продвинутые концепции ООП
Композиция против наследованияМетоды расширенияВызываемые классыЗапечатанные классы (Dart 3)Записи (Dart 3)Паттерны и сопоставление (3.0)Перечисления с методами16Проект: Управление библиотекой
Обзор проектаКлассы Book и User2Конструкторы в Dart
Конструктор по умолчаниюИменованные конструкторыСписки инициализацииКонстантные конструкторыФабричные конструкторыПеренаправляющие конструкторыИтоги — Shape Builder5Инкапсуляция
Публичные и приватные членыСоглашение о префиксе _Приватность на уровне библиотекГеттеры и сеттеры: подробный разборСкрытие данныхИтоги — Записи о студентах8Mixins
Введение в MixinsСоздание MixinsИспользование нескольких MixinsКлючевое слово on в MixinsMixin и наследованиеMixin и интерфейсИтоги: Система животных11Специальные методы
Переопределение toString()Переопределение hashCode и ==Интерфейс ComparableМетод call()Переопределение noSuchMethodПовторение — Пользовательская коллекция14Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy3Свойства классов
Члены экземпляра и статические членыПоля Final и ConstПеременные LateСтатические методы и поляГеттеры и сеттерыИтоги — Менеджер банковского счета6Наследование
Основы наследованияКлючевое слово superПереопределение методовАннотация @overrideКлючевое слово final для классовКонструкторы и наследованиеИтоги: Иерархия сотрудников9Полиморфизм
Основы полиморфизмаПолиморфизм через интерфейсыПроверка типов во время выполненияОператоры is и asКлючевое слово covariantИтоги — Обработчик платежей12Асинхронное ООП
Futures и async/awaitОсновы StreamsКонтроллеры StreamАсинхронные конструкторыАсинхронность в методах классовИтоги — Data Fetcher15Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикПаттерн Репозиторий