MPS 2019.2ヘルプ

型拡張メソッド

言語jetbrains.mps.extensionMethodsは、Javaの静的メソッドと同じように、新しく定義されたメソッドまたはオーバーライドされたメソッドで有効なMPS型を拡張する方法を提供します。

"This is an ordinary string with a surpricing behavior!".myNewMethod() "Develop with pleasure!".isAPleasureMessage() int num = ... num.isPrime()

静的メソッドは拡張クラスの内部部分にはならず、常に拡張メソッドのパラメータの1つとして操作する「拡張」オブジェクトを指定する必要があります。一方、拡張メソッドでは、新しいメソッドが直接リストに追加されます。ターゲットタイプで利用可能な操作。

古き良き「静的メソッド」の代わりに、文字列型に逆のメソッドを追加したい場合は、次のようにします。

public static string reverse(string target) { //reverse the target }

新しい拡張メソッドから新規-> j.m.baseLanguage.extensionMethods / type extensionを作成し、新しいメソッドを定義してそれを文字列クラスに結び付けます。

public extension methods MySampleMethods for string { <<static fields>> public string reverse() { //reverse the string, refering to it through 'this' } }

まったく同じメカニズムを使用して既存のメソッドをオーバーライドすることができます。そして元のメソッドを呼び出す必要があるときは、単に=それを呼び出します。これで

 public extension methods MySampleMethods for string { <<static fields>> public string trim() { this.trim() + " trimmed" //calls the original trim() implementation } }

MPSは拡張メソッドのメカニズムを通して元のメソッドとオーバーライドされたメソッドを視覚的に区別するのに良い作業をするため、ドロップダウンリストから正しいものを選ぶのを間違うことはできません。

extension methods1

明らかにこのメカニズムは独自のドメインオブジェクトにも直交する概念を実装するために使うことができます。

public extension methods Sample for my_type { <<static fields>> public int foo() { return this.bar(); } }

上記のように宣言すると、型my_typeで操作を書くことができます。

my_type var = ...; var.foo();

ルートノード

メソッドを使って型を拡張するには、同様に2つの良い方法があります。タイプの拡張を使用すると、1つの場所にメソッドを1つの場所に追加できます。一方、単純拡張メソッドコンテナーを使用すると、複数の異なる種類の直交概念を実装する場所が1つ必要になります。

タイプの拡張

このルートには単一型の拡張メソッドの宣言が含まれています。

[public|protected|private] extension methods containerName for extendedType { <<static fields>> <<extension methods>> }

拡張メソッド宣言

public ret_Type methodName() { <no statements> }

単純拡張メソッドコンテナー

[public|protected|private] extension methods containerName { <<static fields>> <<extension methods>> }

拡張メソッド宣言ターゲットタイプはメソッドごとに指定されます。

public ret_type methodName() for extendedType { <no statements> }

宣言部

許可された内容

containerName

任意の有効な識別子

extendedType

任意の有効なMPSタイプ

両方の根は1つ以上の静的フィールドを含むことができます。これらはコンテナー内のすべてのメソッドで利用可能です。

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