Полное руководство по перегрузке операторов Dart: изучение методов и примеров

Dart – это мощный язык программирования, поддерживающий перегрузку операторов, позволяющий разработчикам переопределить поведение таких операторов, как +, -, *, / и других. Эта функция позволяет вам настроить работу ваших классов с операторами, обеспечивая гибкость и выразительность вашего кода. В этой статье мы углубимся в различные методы перегрузки операторов в Dart, сопровождая их примерами кода, чтобы помочь вам раскрыть весь потенциал этой возможности языка.

  1. Арифметические операторы:
    Dart позволяет перегружать арифметические операторы, такие как +, -, *, /, % и ~/, для выполнения пользовательских операций над объектами ваших классов. Вот пример:
class Vector {
  double x, y;
  Vector(this.x, this.y);
  Vector operator +(Vector other) {
    return Vector(x + other.x, y + other.y);
  }
}
void main() {
  var v1 = Vector(2, 3);
  var v2 = Vector(4, 5);
  var sum = v1 + v2;
  print('Sum: ${sum.x}, ${sum.y}'); // Output: Sum: 6, 8
}
  1. Операторы равенства и сравнения.
    Вы также можете перегрузить операторы равенства (==, !=) и сравнения (<, >, <=, >=), чтобы определить собственное поведение для сравнения объектов. Вот пример:
class Person {
  String name;
  int age;
  Person(this.name, this.age);
  bool operator ==(Object other) {
    if (identical(this, other)) return true;
    return other is Person && name == other.name && age == other.age;
  }
  int get hashCode => name.hashCode ^ age.hashCode;
}
void main() {
  var p1 = Person('John', 30);
  var p2 = Person('John', 30);
  print(p1 == p2); // Output: true
}
  1. Оператор индексирования:
    Оператор индексирования ([]) можно перегрузить, чтобы обеспечить индивидуальный доступ к объектам на основе индекса. Вот пример:
class Matrix {
  List<List<int>> data;
  Matrix(this.data);
  List<int> operator [](int index) {
    return data[index];
  }
}
void main() {
  var matrix = Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
  print(matrix[1]); // Output: [4, 5, 6]
}
  1. Унарные операторы:
    Унарные операторы, такие как – (отрицание) и ! (логическое отрицание) можно перегрузить для определения пользовательского поведения. Вот пример:
class Complex {
  double real, imaginary;
  Complex(this.real, this.imaginary);
  Complex operator -() {
    return Complex(-real, -imaginary);
  }
}
void main() {
  var c = Complex(2, 3);
  var negated = -c;
  print('Negated: ${negated.real}, ${negated.imaginary}'); // Output: Negated: -2, -3
}

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