Does dart support operator overloading Does dart support operator overloading dart dart

Does dart support operator overloading


Dart does support operator overloading using the operator keyword followed by the operator you want to overload. The following example overloads the == operator for the MyClass object:

class MyClass {  operator ==(MyClass other) {    // compare this to other  }}

almost all Darts built-in operators can be overloaded with a few notable exceptions being the assignment operator = and reference equivalence operator === (doesn't exist anymore).

As for the advantage of operator overloading, it allows you to reuse operators that have a well known semantic meaning such as == or + for operations on your objects. For example, if you have a Matrix class that overloads the + operator then you can add two matrices using the syntax m1 + m2 instead of the more cumbersome m1.plus(m2)


The chosen answer is no longer valid when you try overloads using the == operator in the new version. Now you need to do this:

class MyClass {  @override  bool operator ==(other) {    // compare this to other  }}

But it's not safe. other is not specified as a type, Something unexpected may happened. For example:

void main() {  var a = A(1);  var b = B(1);  var result = a == b;  print(result); //result is true}class A {  A(this.index);  final int index;  @override  bool operator ==(other) => other.index == index;}class B {  B(this.index);  final int index;}

So you could do like this:

class A {  A(this.index);  final int index;  @override  bool operator ==(covariant A other) => other.index == index;}

You need to use covariant. Because Object overloads the == operator.

or you can

Test Object Type:
visit: hash_and_equals

class A {  A(this.index);  final int index;  @override  bool operator ==(other) => other is A && (other.index == index);  @override  int get hashCode => index;}


To extend Lars' answer, you can also overload operators using the inline function syntax.

class MyClass {  operator ==(MyClass o) => id == o.id;}