Skip to content

OverloadedOperators

Dima Kruk edited this page Jan 28, 2013 · 7 revisions

OverloadedOperators is language extension that adds operators overloading behavior to ActionScript3 code.

##Use-cases

Using of operators overloading has two major advantages:

  1. Compact style and readability; for example, it’s much easier to use something like a*b*c than a.multiply(b).multiply(с).
  2. More natural look of the code. Well defined operator is easier to understand and remember than a function name. For example, combining two variables of type Point will look like point1 + point2, instead of point1.plus(point2).

##Declaration

operator operatorAlias ( leftPartType, rightPartType ) -> operatorType
commutative : Boolean
( left, right ) -> returnType {
  return result
}

Overloaded operator declaration expression should be placed to OverloadedOperatorsContainer, that appears instantly in the package right-click menu just after the import of the language extension.

overloaded operators declarationName { 

  <<overloaded binary operators>> 
  <<custom operators declaration>> 

}

Overloaded operators declaration block is intended to store overloaded operators declaration expressions. It can contain custom operators declarations, as well as overloaded binary operators declaration (like “+”, “-” or “*”). Should be placed to OverlodedOperatorsContainer.

overloaded operators MyOperators {

  // overloading  "+" operator for the Point type
  operator + (Point, Point) -> Point 
  commutative: false
  (left, right)->Point {
    // this code will be executed on combining Point with Point
    return new Point(left.x + right.x, left.y + right.y); 
  }

  <<custom operators declaration>>
}

###Custom operator operatorAlias

Custom operator expression add a visual presentation to the newly created custom operator. After the custom operator statement is filled out, the new operator appears in autocomplete. For the rest, the syntax of a custom operators declaration doesn’t significantly differs from the overloaded operators declaration.

// this sample demonstrates how to create the custom operator
// that will check a string for matching a regular expression

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

commutative : Boolean

Commutativity rule switch, that determines the overloaded operator behavior. Default state is false. Change this behavior with care. Overusing this feature may involve unexpected effects.

Clone this wiki locally