Основы конструкторов
Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 8 из 110.
Конструктор — это специальный метод, который запускается автоматически при создании нового объекта. Он инициализирует переменные экземпляра объекта непосредственно в момент создания.
Вот пример класса с конструктором:
class Dog {
String name;
String breed;
Dog(String name, String breed) {
this.name = name;
this.breed = breed;
}
}Конструктор имеет то же имя, что и класс. Параметры передаются при создании объекта.
Создавайте объекты, передавая аргументы в конструктор:
Dog rex = Dog('Rex', 'German Shepherd');
Dog buddy = Dog('Buddy', 'Golden Retriever');Доступ к переменным, установленным конструктором:
print(rex.name);
print(rex.breed);
print(buddy.name);
print(buddy.breed);Вывод:
Rex
German Shepherd
Buddy
Golden RetrieverDart также предлагает сокращенный синтаксис конструктора, использующий this.variableName непосредственно в списке параметров:
class Dog {
String name;
String breed;
// Сокращение: автоматически присваивает параметры переменным экземпляра
Dog(this.name, this.breed);
}Обе версии дают одинаковый результат. Сокращенная запись — это популярная возможность Dart, которая избавляет от необходимости писать this.name = name вручную.
Вы также можете добавить значения параметров по умолчанию:
class Cat {
String name;
int age;
Cat(this.name, [this.age = 1]); // age по умолчанию равен 1
}
Cat fluffy = Cat('Fluffy', 3);
Cat whiskers = Cat('Whiskers'); // age по умолчанию равен 1
print('${fluffy.name} is ${fluffy.age}'); // Fluffy — 3
print('${whiskers.name} is ${whiskers.age}'); // Whiskers — 1Ключевой момент: Конструкторы гарантируют, что каждый объект правильно инициализируется данными в момент его создания, избавляя вас от необходимости вручную устанавливать значения переменных впоследствии.
Задание
ЛегкоВам предоставлены PHP-файлы (book.dart и driver.dart) для реализации книжной системы.
Ваши задачи:
- Завершите класс
Bookвbook.dart, добавив конструктор, который инициализируетtitle,authorиpages— используйте сокращенный синтаксис DartBook(this.title, this.author, this.pages); - В
driver.dartсоздайте объектBookдля'Harry Potter'автора'J.K. Rowling'с400страницами
Следуйте комментариям TODO в каждом файле.
Шпаргалка
Конструктор — это специальный метод, который запускается автоматически при создании нового объекта. Он инициализирует переменные экземпляра объекта в момент создания.
Конструктор имеет то же имя, что и класс:
class Dog {
String name;
String breed;
Dog(String name, String breed) {
this.name = name;
this.breed = breed;
}
}Создавайте объекты, передавая аргументы в конструктор:
Dog rex = Dog('Rex', 'German Shepherd');Dart предлагает сокращенный синтаксис конструктора, используя this.variableName непосредственно в списке параметров:
class Dog {
String name;
String breed;
Dog(this.name, this.breed);
}Вы можете добавить значения параметров по умолчанию, используя необязательные позиционные параметры:
class Cat {
String name;
int age;
Cat(this.name, [this.age = 1]); // age по умолчанию равен 1
}
Cat fluffy = Cat('Fluffy', 3);
Cat whiskers = Cat('Whiskers'); // age по умолчанию равен 1Попробуйте сами
import 'book.dart';
void main() {
// TODO: Создайте объект Book с:
// title: 'Harry Potter', author: 'J.K. Rowling', pages: 400
Book myBook = ?;
print("'${myBook.title}' by ${myBook.author}, ${myBook.pages} pages");
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
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
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикПаттерн Репозиторий