This (プログラミング)

thisの概念



プログラミング言語における「this」は、自身のインスタンスを指し示すための予約語です。多くの場合、インスタンスメソッド内で使用され、オブジェクト指向プログラミングの基本的な要素の一つです。「this」は、役割や振る舞いにおいて他の言語での「self」や「Me」といった用語と類似性を持ちながらも、共通の概念として機能しています。

概要


「this」は、現在のオブジェクトを参照するためのものであり、一般的には変更できません。オブジェクトが生成されると、「this」への参照は常に有効となります。言語によっては明示的に「this」を指定する必要がありますが、他のケースでは暗黙に処理される場合もあります。しかし、明示的に「this」が必要になる場面もあります。たとえば、ローカル変数が同名のメンバー変数を隠蔽する場合や、メソッドが自身を返す際などです。

また、「this」はメソッドに引数として渡され、特にC++のような言語では、メソッドは「this」ポインタを介して呼び出されます。

```cpp
void exampleMethod() {
// メソッド内でこのようにすることで、thisが使われます。
}
```

PythonPerl 5などの一部の言語では、明示的に「this」を引数にする必要があり、その名前を「this」や「self」として定義することが一般的ですが、他の名前も許容されます。

言語ごとの仕様


C++


C++では、初期のバージョンにおいて「this」を変更可能でしたが、後のバージョンでは右辺値と位置付けられ変更ができなくなりました。このような特性により、C++の特徴的な機能として「delete this」を利用することで、オブジェクトを自ら消去することが可能です。

C#


C#では「this」は現在のインスタンスを指し、特に値型においては、「this」を代入文の左辺に書くことで自身の値を変更することができます。C# 7.2ではreadonly構造体が導入され、この機能を制限することが可能となっています。

Java


Javaにおいても「this」は現在のインスタンスを指すキーワードであり、クラス内のメソッドや値を参照するために利用されています。Javaのすべてのインスタンスメソッドは仮想メソッドであるため、「this」がnullとなることはありません。

JavaScript


プロトタイプベースJavaScriptでは、「this」が指す対象が関数の呼び出し方によって異なるため、文脈に応じて取り扱いに注意が必要です。例えば、あるオブジェクトのメソッドとして呼び出されると「this」はそのオブジェクトを指します。また、関数を独立して呼び出す場合、strict modeではundefinedとなり、それ以外ではグローバルオブジェクトを指します。

Python


Pythonでは、文法上「this」という予約語が存在しませんが、メンバ関数において自動的に対象オブジェクトが引数として渡されます。この引数は通常「self」と呼ばれ、慣習的に使用されています。クラスメソッドではクラス自身が渡され、静的メソッドでは引数は渡されません。

まとめ


「this」というコンセプトは、プログラミング言語においてオブジェクト指向の核をなす概念の一つであり、各言語において取り扱いや役割に違いが見られます。そのため、それぞれの言語特有の仕様や使用法を理解することが重要です。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。