Только вчера я решил начать изучать язык программирования Haxe после того, как использовал ActionScript 3 в течение последних нескольких лет. Сегодня я изучаю абстрактные типы, и я понял, что они кажутся совершенно отличными от абстрактных классов на Java. Я начинаю понимать, что они делают, но я не уверен, для чего используются тезисы. Что представляет собой правильное использование тезисов в Haxe, и когда я должен одобрять их по классам?
Например, ниже приведено неполное определение типа комплексного числа с использованием абстрактного типа. Должен ли я предпочесть этот или просто обычный класс?
abstract Complex({real:Float, imag:Float}) {
public function new(real:Float, imag:Float) {
this = { real: real, imag: imag };
}
public function real():Float { return this.real; }
public function imag():Float { return this.imag; }
@:op(A + B)
public static function add(lhs:Complex, rhs:Complex):Complex {
return new Complex(lhs.real() + rhs.real(), lhs.imag() + rhs.imag());
}
public function toString():String {
return real() + " + " + imag() + "i";
}
}