Практика на класс-значение в Dart
Задачи на обычные классы, где равенство и копия задаются явно, без автогенерации методов.
Сделайте класс Book с полями
isbn, title и year.
Дан список:
var shelf = [
Book("1", "Alpha", 2020),
Book("2", "Beta", 2024),
Book("3", "Gamma", 2020),
];
Выведите число книг с year == 2020.
Сделайте класс Point
с полями x и y
и переопределите operator ==.
Даны значения:
var p1 = Point(1, 2);
var p2 = Point(1, 2);
var p3 = Point(2, 1);
Выведите три результата сравнения ==:
p1 и p2, p1 и p3,
p2 и p3.
Сделайте класс Employee с полями
login и active
по умолчанию true и метод copyWith.
Дан объект:
var u = Employee("neo");
Получите копию с active = false.
Выведите login и active новой записи.
Сделайте класс PairTag
с полями key и value.
Дана карта:
var tags = {
"env": PairTag("env", "prod"),
"ver": PairTag("ver", "3"),
};
Для ключа "ver" выведите value
или "missing", если записи нет.
Сделайте класс OrderLine
с полями sku и qty.
Дан список:
var lines = [
OrderLine("a", 2),
OrderLine("b", 1),
OrderLine("a", 3),
];
Выведите сумму qty для sku == "a".
Сделайте класс RGB с полями
r, g и b
и переопределите toString().
Создайте RGB(10, 20, 30).
Выведите строку toString().
Сделайте класс Version
с полями major и minor
и метод copyWith.
Даны версии:
var v1 = Version(1, 0);
var v2 = v1.copyWith(minor: 2);
Выведите major и minor у v1
и у v2 в формате из четырех чисел, разделенных пробелами.
Сделайте класс Hit
с полями page и ms.
Дан список:
var hits = [
Hit("/", 120),
Hit("/api", 40),
Hit("/", 80),
];
Выведите среднее ms для page == "/"
как целое (отбросьте дробную часть).
Сделайте класс Edge
с полями from и to,
переопределите == и hashCode.
Поместите три ребра в набор,
добавьте дубликат первого ребра.
Выведите размер набора.
Сделайте класс Row
с полями id и text.
Дана переменная:
Row row = Row(5, "note");
Выведите id и text
в одной строке: сначала id,
затем text, между ними двоеточие.