Ключевое слово this
Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 5 из 110.
Ключевое слово this ссылается на текущий экземпляр класса. Внутри метода this позволяет получить доступ к собственным переменным объекта.
Вот пример класса с методами, использующими this:
class Car {
String color = '';
String model = '';
void honk() {
print('Beep beep!');
}
void describe() {
print('I am a ${this.color} ${this.model}');
}
}Внутри describe(), this.color и this.model относятся к переменным этого конкретного объекта.
Создайте объект автомобиля и задайте его переменные:
Car myCar = Car();
myCar.color = 'Red';
myCar.model = 'Sedan';Вызовите методы:
myCar.honk();
myCar.describe();Вывод:
Beep beep!
I am a Red Sedanthis особенно полезно, когда параметр метода имеет то же имя, что и переменная экземпляра:
class Car {
String color = '';
void setColor(String color) {
this.color = color; // this.color = переменная экземпляра, color = параметр
}
}Без this Dart не знал бы, относится ли color к параметру или к переменной экземпляра. Ключевой момент: this всегда ссылается на конкретный объект, который в данный момент вызывает метод.
Задание
ЛегкоДополните класс Car в car.dart, добавив метод с именем displayInfo, который использует ключевое слово this для вывода года, марки и модели автомобиля в формате:
'This car is a [year] [make] [model]'
car.dart: Содержит классCar, в который вы добавите методdisplayInfodriver.dart: Устанавливает значения переменных для объекта car и вызываетdisplayInfo()(заблокировано)
Шпаргалка
Ключевое слово this ссылается на текущий экземпляр класса и позволяет вам обращаться к собственным переменным объекта внутри методов.
Использование this в методе:
class Car {
String color = '';
String model = '';
void describe() {
print('I am a ${this.color} ${this.model}');
}
}this особенно полезно, когда параметр метода имеет то же имя, что и переменная экземпляра:
class Car {
String color = '';
void setColor(String color) {
this.color = color; // this.color = переменная экземпляра, color = параметр
}
}Без this Dart не знал бы, относится ли color к параметру или к переменной экземпляра.
Попробуйте сами
import 'car.dart';
void main() {
Car myCar = Car();
myCar.year = '2020';
myCar.make = 'Toyota';
myCar.model = 'Corolla';
myCar.displayInfo();
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
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
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикПаттерн Репозиторий