2012-04-12 20 views
9

He leído que Dart no admite la sobrecarga de funciones. ¿Es compatible con la sobrecarga del operador? Si es así, sería amable y muéstrame cómo en un simple ejemplo de cómo se hace. Y cuáles son algunas ventajas, etc. Soy nuevo en la programación. Gracias.Dart support operador sobrecarga

+0

donde has leído que * Dart no soporta la sobrecarga de funciones *? –

Respuesta

14

Sí Dart admite la sobrecarga del operador utilizando el operador palabra clave seguido del operador que desea sobrecargar. El siguiente ejemplo sobrecarga el == operador para el objeto MyClass:

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

casi todos los dardos operadores incorporados pueden ser sobrecargados con algunas excepciones notables siendo el operador de asignación = y referencia equivalencia operador === (ya no existe).

En cuanto a la ventaja de la sobrecarga de operadores que permite volver a utilizar los operadores que tienen un significado semántico conocido como == o + para las operaciones en los objetos. Por ejemplo, si usted tiene una clase Matrix que sobrecarga el operador + entonces usted puede agregar dos matrices usando la sintaxis m1 + m2 en lugar de la m1.plus más engorroso (m2)

+0

podría decirme si 'otro' es algo especial o podría llamarse otra cosa. Me gusta == (MyClass ggg) –

+1

@MuhammadUmer otro podría llamarse cualquier cosa, es solo el nombre del parámetro del objeto de clase que está comparando con, por ejemplo, este == otro o este + otro –

+0

¿El argumento tiene que ser del mismo tipo, o ¿Se pueden crear operadores como Scala's List contra operator ::, donde el tipo a la izquierda es el tipo de elemento para crear el nuevo encabezado, y el tipo a la derecha es el tipo de lista? – pohl

6

Para extender Lars' respuesta, también puede sobrecargar a los operadores que usan la sintaxis de la función en línea.

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