MPS 2019.2ヘルプ

振る舞い

構文木の操作中、タスクを単純化し機能を再利用するために、一般的な操作がユーティリティメソッドに抽出されることがよくあります。そのようなユーティリティを静的メソッドに抽出したり、仮想メソッド内にユーティリティコードを保持するノードラッパーを作成することが可能です。しかし、MPSではより良い解決策が利用できます。振舞い言語の側面です。ノード上に仮想および非仮想インスタンスメソッド、静的メソッド、および概念インスタンスコンストラクターを作成することが可能になります。

コンセプトインスタンスメソッド

Conceptインスタンスメソッドは、指定された任意のコンセプトインスタンスで呼び出すことができるメソッドです。それらは仮想的でnon-virtualでもかまいません。概念を拡張することで仮想メソッドをオーバーライドすることはできますが、non-virtualのものは無効にできません。仮想概念メソッドも抽象として宣言することができ、継承を実装に提供することを強制します。

概念インスタンスメソッドは、概念宣言と概念インターフェースの両方で実装できます。これにより、メソッド解決の課題が発生する可能性があります。MPSが継承階層でどの仮想メソッドを呼び出すかを決定する必要がある場合は、次のメソッド解決順序(MRO)アルゴリズムが適用されます。

  • 現在の概念がマッチングメソッドを実装している場合は、それを呼び出します。計算値を返します。

  • 拡張概念がある場合は、そのアルゴリズムを再帰的に呼び出します。成功した場合は計算値を返します。

  • implementsセクションでの定義順に、実装されているすべての概念インターフェースに対してこのアルゴリズムを再帰的に呼び出します。メソッドを実装している最初に見つかったインターフェースが使用されます。成功した場合は計算値を返します。

  • 失敗を返します。

動作メソッドをオーバーライドする

スーパーコンセプトから継承したメソッドをオーバーライドするには、Control/Cmd + Oキーボードショートカットを使用してオーバーライドダイアログを呼び出します。そこでは上書きする方法を選択できます。オーバーライドする目的のメソッドの名前を入力して、メソッドの一覧を絞り込みます。

コンセプトコンストラクター

概念インスタンスが作成されるとき、いくつかのプロパティー/参照/子をデフォルト値に初期化することはしばしば役に立ちます。これが、概念構築子が使用できるものです。概念構成内のコードは、特定の概念の新しいノードがインスタンス化されるたびに呼び出されます。

Behaviorコンストラクターは次の場合に呼び出されます

  • 新しいinitialized()を追加新しいinitialized()をセット、および j.m.lang.actionsj.m.lang.smodelの類似の方法でノードを作成する

  • new node<Car>()でノードを作成する

Using quotation like <Car()> will not call the Behaviors constructor. Consider using the smodel constructor instead.

コンセプトスタティックメソッド

一部のユーティリティメソッドは概念インスタンスに属していないため、インスタンスメソッドとして作成しないでください。概念全体の機能のために、MPSは静的概念メソッドを提供します。制約も参照してください。

nullノード/コンセプトに対する振る舞いメソッドの呼び出し

ノードまたは概念を表すnullオブジェクトに対して振る舞いメソッドが呼び出された場合、呼び出しはNullPointerExceptionにはなりません。代わりに、呼び出されたメソッドの戻り型がClassifierTypeまたはStringTypeの場合、null値が返されます。PrimitiveTypeの場合、そのタイプのデフォルト値が返されます。

最終更新日: 2019年8月30日

関連ページ:

引用符

引用符は、必要な構造を持つノードを簡単に作成できるようにする言語構成です。もちろん、smodelLanguageを使用してノードを作成してから、同じsmodelLanguageを使用して適切な子、プロパティー、および参照を手動で追加することもできます。ただし、これを実現するためのより簡単で、より視覚...

エディター・アクション

MPSエディターには、完了アクション、ノード作成ポリシーにかなり賢明なデフォルトがあります。しかし、カスタマイズしたい場合は、アクション言語を使用しなければなりません。サイド変換アクションとノード代替アクションはMPS 3.4で非推奨になり、新しい変換メニュー言語に置き換えられました。ノードファクト...

制約

構造言語は、言語構造に関する高度な制約を表現するには不十分な場合があります。制約アスペクトは、このような追加の制約を定義する方法を提供します。デフォルトの具体的な概念:抽象概念の場合は、制約アスペクトを使用して、抽象概念のノードを作成する必要があるときに代わりに使用する概念を示すことができます。例:...

型システム

言語のための型システムを定義する:このページでは、MPS型システムについて詳しく説明します。最初の型システムの規則を定義する際に、さらに簡単に導入したい場合は、型システムクックブックをチェックしてください。コードから型システムを使用する方法をよく知りたい場合は、型システムを使うの章も参照してください...