数日前、フラッシャー用の新しいIDEの10番目のベータ版を公開しました。 この記事では、Traits言語拡張機能について説明します。
アクションスクリプトは最新のOOP言語です。 今日のOOPの解釈は、多重継承が悪質な慣行であることを示唆しています。 言語により、多重継承はインターフェースを介してのみ可能です。 これは正しいことです。ここで議論する意味はありません。
しかし、あなたはしたい! 多くの場合、継承を通じて機能を追加する機能がないため、開発者は多くの庭をフェンスする必要があります。
たとえば、Creatureクラスがあります。 私たちは彼に話すことを教えたいです。 「正しい」OOPは何をすべきかを教えてくれます。 ISpeakerインターフェイスを作成しています。 speak()メソッドを追加します。 このインターフェイス-Speakerクラスを実装します。 クラスはISpeakerを継承し、デリゲートを追加します。 そして、Speakメソッドは、speak()メソッドの呼び出しをdelagateに転送します。 できた
ここで、多重継承があると想像してください。 スピーカークラスを作成します。 そして、Speaker Creatureクラスを継承します。 それだけです
今、私たちのクリーチャーにはできることがたくさんあると想像してください:歩いて、腕と足を動かして、食べて、笑って、泣いてください。 たぶん飛ぶ。 しかし、タスクがどのような要件を設定するのか、あなたは決して知りません。 その結果、開発者でさえこのコードの本当の目的を理解することが困難になるほどすべてを冗長にする「正しい」OOPコードがたくさんあります。 そしてまた、時間。
もちろん、私たちは、説明した状況が不自然であることを経験しました。 行動のあらゆる側面に対応するインターフェイスを作成するのは誰ですか? これらの側面をCreatureだけでなく適用する必要がある場合でも。 いいえ、実際のコードは見た目が異なります。それほど美しくなく、トレーニングも、生活に近いものでもありません。 よりシンプル。
そのため、ECMA Script開発者、そして後にActionScript開発者の意図は、実際の日常業務で適切な(正しい)OOP言語を横行させることになります。
おそらく十分な苦情。 これを修正するツールがあります。 RASE。 Realaxy ActionScriptエディター。 このソリューションは、ActionScript言語の拡張機能である特性言語です。
すぐに練習してください。
エディターで新しいプロジェクトを作成し、Creatureメインクラスを使用してtestTraitsモジュールを作成します。
1。
2。
3。
4。
特性言語-ctrl + L(cmd + L)をインポートします。
Speakインターフェイスを作成します。 ここでは、「話す」という1つのメソッドを作成します。
編集ウィンドウの下部には、「インターフェース」と「トレイト」の2つのタブがあります。
「Trait」タブを選択し(これまで灰色で表示されていました)、空のエディターフィールドをクリックします。 特性の作成を促すダイアログボックスが表示されます。
「OK」を選択すると、エディターがデフォルトの実装を作成しました。
「話す」メソッドの本体を追加します-コンソールに「Hello!」と印刷するだけです。
Creatureクラスに進み、実装に「話す」インターフェースを追加しましょう。
エディターは、インターフェース名の右側に文字「i」を追加しました。 これは、インターフェイスにデフォルトの実装があり、特性の動作があることを意味します。
エディターは、この動作により、メソッドがクラスに追加され、エラーが強調表示されないことを知っています。
それだけです 私たちの生き物は話すことができます! これを実際に検証することは残っています。 クラスコンストラクターで「speak()」メソッドへの呼び出しを追加します。
実行構成を追加します。
1。
2。
3。
4。
フラッシュドライブを実行します。 コンソールに「Hello」というメッセージが表示されます。
私たちが得たもの:
- インターフェイスと実装コードは「物理的に」接続されています-エディターのブックマーク、ナビゲーション。
- コードは整理されています。 実装には名前があります-インターフェイスの名前と「Impl」。
- 使いやすさと使いやすさ。 この動作が使用されるクラスでは、実装されたリストにインターフェースを追加するだけです。
- カツレツからハエを分けます。 クリーチャークラスコードには、不要なエンティティが「散らばっています」ことはありません。 彼らは生き物に「話す」とすべてを語った。
多重継承のように見える動作がありますが、「正しい」OOPテクニックに依存しています。
仕組みを見てみましょう。 結果としてどのコードを取得します。
「ビルド->生成(廃止)->現在のモデルからテキストを生成」。 「出力」ウィンドウが表示されました。 Creatureクラスのコードに興味があります。
クラシックコンポジションを実装するコードがあります。 つまり、特性言語拡張機能は、基本的に不必要なコードを隠すだけで、コードの成果物を整理します。 しかし、実際には純粋なOOPがあります。
今、私たちはどんな行動でも簡単かつ便利に教える方法を想像するのは簡単です。 しかし、主なことはこの動作です。これまでにないように、同じ原則を他のクラスに適用できます。
やってみましょう。 10分
Creatureクラスはすでに多くのことを行うことができ、クラスコードも同じようにきれいで、詰まっていない。
この言語拡張なしで記述した場合のコードを見てみましょう。
これについては、休暇を取って質問、提案、コメントを待っています。
エディターはからダウンロードできます。
作業用ドラフトは住所で入手できます 。
エディターが初めての場合は、 当社のWebサイトまたはHabrの記事「最初のステップ」を確認してください。