
Realaxy ActionScript Editorの次のベータ版には、いくつかの新しい言語拡張機能が含まれています。 多重継承を利用できるTraits言語については既に説明しましたが、今度は別の重要度の低い可能性、つまりステートメントのオーバーロードと作成について説明します。
ここからエディタをダウンロードできます。
RASEに慣れていない場合は、 入門記事を必ず読んでください 。
ビルド8144で記事を書いているときに、バグが発見されました。 6月8日より前にRASE beta 10をダウンロードした場合は、必ず最新バージョンをダウンロードしてください。
RASE beta 10に追加された主な機能の1つは、オペレーターのオーバーロードです。
この機会は、多重継承と同様に、さまざまなプログラミングパラダイムのフォロワーの間で論争の的となっています。
演算子のオーバーロードを使用する理由は、コンパクトさと自然さです。
コンパクト性-a * b * cまたはa.multiply(b).multiply(s)
自然性-複数の変数を追加する場合、メソッド呼び出しよりも追加の兆候を想像する方が簡単です。 たとえば、タイプがPointの2つの変数を合計すると、「 point1.plus(point2) 」ではなく、「 point1 + point2 」が表示されます。
オペレーターの過負荷の反対者は、コードに対する制御の喪失を示します。 オペレータが過負荷になっている場所とそうでない場所は常に明確ではありません。 演算子をオーバーロードすると、既存のコードの動作が変更されます。予期しない影響が生じる可能性があります。
ActionScript(ECMA3)は演算子をオーバーロードしません。 しかし、それらは現在利用可能なECMA4仕様に存在します。 Javaにはオーバーロードはありませんが、Groovy(「Java with sugar」)およびScalaにあります。 C#でオーバーロードする可能性があります。
オペレーターのオーバーロードがどれだけ良いか悪いかを述べることを約束しません。 ただし、場合によっては、この機能の使用が本当に必要になることは間違いありません。 たとえば、コードに多数の数学演算が含まれる場合。 メソッド呼び出しではなく、演算子を使用すると、時間を短縮できます。 また、多くの場合、コンパクトさがより制御されます。
理論を終了し、実践に移ります。
Realaxy ActionScript Editor(RASE)の10番目のベータでは、言語overloadedOperatorsが登場しました。 このような言語(他の言語と同様)をプロジェクトに追加するのは簡単です。「ctrl + L」キーの組み合わせを押すだけです。
ところで、overloadelOperators RASEは、MPSプラットフォームのoverloadedOperators言語の移植版です。 車輪を再発明しないことに決め、主題分野を研究した結果、MPSプラットフォームのソリューションは自給自足であり、すべてのニーズを満たしているという結論に達しました。 しかし、私たちは自分たちから「グッズ」をいくつか追加しました。
これは、LOPが他の言語から最高の能力を引き出し、ニーズに合わせて調整するための正しい方法であると考えています。 ただし、言語拡張機能の作成に関する記事の後半で詳しく説明します。
プロジェクトとプロジェクトのモジュールを作成しましょう。 モジュールのメインクラスで、テスト用のコードを追加します。



このコードでは、Point型の2つの変数p1とp2を作成し、これらの2つの点を追加した結果である変数p3を取得します。
次に、すべての変数の値をコンソールに表示します:p1、p2、p3。 草刈りの文字列メッセージを形成するために、ロギング言語の式の値を使用しました。
コードには、「これらのオペランドに操作を適用できません」というエラーメッセージがあります。 コンパイルはできません。
ここで、演算子のオーバーロード宣言を作成します。
オーバーロードされた言語をインポートします。

そして、新しいルート「OverlodedOperatorsContainer」を追加します。 パッケージを右クリックして、リストから選択します。

「MyOperators」と呼びましょう

内部には、宣言を追加するための2つのブロック、「オーバーロードされたバイナリ演算子」と「カスタム演算子宣言」があります。 カーソルを最初のブロックに設定し、Enterキーを押します。 新しい演算子宣言が追加されました。

「+」演算子を選択し、ポイントタイプを左右に割り当てます。 Pointの戻り値を設定します(voidをPointに変更します)。
ここで、加算演算子を使用した場合に実行されるコードを追加し、右側と左側にPoint型の変数があります。

そしてそれだけです。 クラスに移動して、テキストコードを記述した場所に移動します。赤いコードはもうないことがわかります。
コンパイルを実行します。 モジュールの実行構成を作成します。


まだ行っていない場合は、main-classをインストールします。

コンソールに次のメッセージが表示されます。

次に、より複雑な例を作成し、減算、除算の乗算の操作を再定義してみましょう。 そして、数字とポイントの両方。

2つのポイント間の距離の中心から50ピクセル左下にあるポイントを計算するタスクがあるとします。

またはさらに簡単:

すべてが非常に簡単です。 しかし、フラッシャーの実際の生活では次のようになることを忘れないでください。

前の2つの図自体は、Flashプロジェクトでオーバーロードされた演算子を使用するための引数であると考えています。
次に、独自の演算子を作成する方法を学習します。
「MyOperators」演算子の宣言に移動し、「カスタム演算子宣言」にカーソルを移動します。 「Enter」を押して宣言を追加します。 視覚的表現を指定-"〜="

オペレーターは、正規表現に対して文字列をチェックする必要があります。
オペレーターの動作を説明します。 Pointの場合と同様に、通常のオーバーロードの宣言である新しいオーバーロードを追加しますが、オートコンプリートのリストでは演算子を選択します。 左のオペランドは文字列を取り、右のオペランドはRegexp型の値をとる必要があります。 演算子の結果はブール値になります。 オペレーターが実行するコードを追加します-Regexpで「テスト」を呼び出します。

Mainクラスでコードのテストブロックを作成します。

シンプルで便利。
新しい演算子で混乱しないように、エディターレベルでは、それらの使用はナビゲーションを使用した宣言に関連付けられています。 Ctrl + BまたはCtrl +演算子をクリックし、宣言に移動します。 また、演算子の上にカーソルを置いてCtrlキーを押すと、演算子が過負荷になっていることを確認できます。
Macの場合-CtrlはもちろんCommandに変わります。
次に、オペレータに新しい動作-「可換」を教えます。
カーソルを置いて、「Fin Binary Operation」操作を選択します。 左右の部分が逆になります。 コードにエラーが発生しました。エディターはそのようなオペランドを持つ演算子を認識していません。

オペレーターの宣言に移動します。 そして、「可換」をtrueに設定します。
戻ります-コードは赤でなくなっています(コードを更新するにはF5を押す必要がある場合があります)。
つまり、私たちの「可換」は、実際には、用語の場所を変更しても変わらない量に関する古き良きルールです。
OOPの達人は、この動作を慎重に使用することをお勧めします。 予期しない影響が生じる可能性があります。 私たちは一言を取り、将来のために私たちの記憶に入れます。
それだけです、ActionScriptには演算子のオーバーロードがあります。
プロジェクトをダウンロードします 。