-
Notifications
You must be signed in to change notification settings - Fork 0
OverloadedOperators (ru)
OverloadedOperators - языковое расширение, добавляющее возможность перегрузки операторов.
Перегрузка оператора имеет два основных преимущества:
- Компактный синтаксис и читабельность.
Например, намного удобнее использовать
a*b*cвместоa.multiply(b).multiply(с). - Более естественный вид кода.
Удачно определённый оператор легче понять и запомнить, чем имя метода. Например, сложение двух переменных типа
Pointможет выглядеть, какpoint1 + point2, вместоpoint1.plus(point2).point1.plus(point2).
##Декларация
Для использования OverloadedOperators вам необходимо импортировать язык overloadedOperators. После этого в контекстном меню пакета появится пункт "New->OverloadedOperatorsContainer".
overloaded operators declarationName {
<<overloaded binary operators>>
<<custom operators declaration>>
}operator operatorAlias ( leftPartType, rightPartType ) -> operatorType
commutative : Boolean
( left, right ) -> returnType {
return result
}Блок декларации перегруженного оператора служит для описания поведения оператора.
overloaded operators MyOperators {
// перегруженный оператор "+" для типа Point
operator + (Point, Point) -> Point
commutative: false
(left, right)->Point {
// будет вызвано при сложении Point и Point
return new Point(left.x + right.x, left.y + right.y);
}
}###custom operators operatorAlias
Добавляет пользовательское визуальное представление оператора. После полного описания, оператор будет доступен в коде при автозаполнении.
В примере показано, как создать пользовательский оператор, который будет проверять строку на соответствие регулярному выражению.
overloaded operators MyOperators {
// overloaded operators ------------------------- /
operator ~= (String, RegExp) -> Boolean
commutative: true
(left, right)->Boolean {
return right.test(left);
}
// custom operators ----------------------------- /
custom operator ~=
} public function method()
{
if ("Any text" ~= /^Any.+$/) {
// if true, output this message
trace "text start with 'Any'";
}
} commutative : Boolean
Переключатель правила коммутативности, который определяет поведение перегруженного оператора. Значение по умолчанию false. Изменяйте это поведение с осторожностью. Изменение поведения может приводить к неожиданным эффектам.