This (プログラミング)

codice_1は、プログラミング言語に出てくる概念のひとつで、自身の動いているオブジェクトを指す予約語。主にインスタンスメソッド内で使用される。codice_1の他にcodice_3、codice_4といった語を使う言語もあるが、言語を問わず概念は共通しているので、以下ではcodice_1で代表させて記述することとする。
概要.
codice_1は現在のオブジェクトを指した参照、あるいはポインタであり、たいていの場合は変更不可能である。
オブジェクトが生成すると、codice_1への参照はつねに有効なものとなる。これは明示的に参照しなければならない言語もあれば、静的スコープで暗黙のうちに解決している言語もある。ただし、codice_1を暗黙のうちに解決する言語でも、明示的にcodice_1を必要とする場面（ローカル変数で隠蔽されている同名のメンバー変数を参照する場合や、自身への参照を返り値とする場合など）もある。
codice_1はメソッドへの引数となっている。例えば、C++で書いた以下のようなメソッドは、
int foo::print (bar x)
本質的にはC言語での以下のような呼び出しに相当している。
int foo_print (foo *const this, bar x)
PythonやPerl 5など、言語によってはcodice_1をメソッドへの1つ目の引数として明記する必要がある。この引数の名前をcodice_1やcodice_3とする必然性はなく、他の引数と同様にどんな名前を付けても文法上問題はない。ただし、通常の場合、PythonやPerlでは慣習的にcodice_3が使われる。
GCCなど、一部のC++コンパイラでは、codice_1を引数に明示することで、その型を別なポインタに変えることができる。
C++やJavaでの静的メソッドはインスタンスに対応せずクラスに所属するものであるため、codice_1は使えない。Python、Ruby、Smalltalk、Objective-Cなどでは、「クラスオブジェクト」のメソッド（クラスメソッド）となっていて、codice_1はクラスオブジェクトを指す。
言語ごとの事情.
初期のバージョンの ではcodice_1を変更でき、メソッド内から動作するオブジェクトを切り替えることができたが、のちに不可能となり、codice_1は右辺値となっている。
初期の には参照がなかったが、もし最初から参照があったとしたら、codice_1はポインタではなく参照となっていたであろう。
 では、codice_21とすることで、オブジェクトが自ら消えることができる。
C# では、codice_1は現在のインスタンスのメンバーを参照するのに用いられる。
特徴的な点として、C#の値型ではメンバー参照に加え、codice_1を代入式の左辺に置いて自分自身の値を書き換えることができる。
C#7.2で追加されたreadonly構造体では、このcodice_1の書き換えを禁止できる。
struct MyStruct {
 // 読み取り専用フィールド
 public readonly int Num;
 public MyStruct(int num) {
 Num = num;
 public void ChangeThis() {
 // 自分自身を書き換える
 // フィールドは読み取り専用にも関わらず、全体が書き換わる
 this = new MyStruct(Num + 1);
// readonly構造体ではこの書き換えはできない。
readonly struct MyStruct {

 では多重ディスパッチが行われ、codice_1という概念がないが、メッセージをあるオブジェクトに送るという意識は文法に残っている。下に示した2つの記法は糖衣構文であり、同等に動作する。
 では、codice_1は現在のインスタンスを指すキーワードであり、クラスの値やメソッドを参照するのに用いられる。 ではインスタンスメソッドがすべて仮想メソッドなので、codice_1が codice_30 となることはない。
プロトタイプベースオブジェクト指向言語である では、関数はオブジェクトに属している（メソッドである）ことも、属さないでいる（ただの関数である）こともできる。したがって、codice_1が何を指しているかは、関数の呼び出し方によって異なっている。
多くの場面では、クラスベースオブジェクト指向言語の codice_1 と同じように使うことができる。たとえば、
object.notify = function () { alert (this); };
object.notify();
のように関数（codice_33）をメソッドとして呼び出した場合、codice_1はcodice_35を指す。また、
Counter = function () { this.counter_value = 0; };
c = new Counter();
のように codice_36 を付けて関数（codice_37）をコンストラクタとして呼び出した場合、codice_1 は新しく生成されるオブジェクトを指す。
関数を単独で呼び出す場合は、codice_1はstrict-mode中であればcodice_40であり、そうでなければグローバルオブジェクトを指すが、codice_1が何を指すかを個別に指定して呼び出すこともできる。(codice_42) 。
 では codice_3 が使われる。
 では codice_3 が使われる。
PHP.
PHPでは、codice_1 が使われる。
 では、codice_1は文法上の予約語ではないが、自動的に対象となるオブジェクトが渡される、メンバ関数の1つ目の引数となっている。慣習的に、この引数の名前としてcodice_3が使われる。codice_48修飾子を付けて定義されたクラスメソッドでは、1つ目の引数にクラスオブジェクトそのものが渡される。codice_49修飾子を付けて作られた静的メソッドでは、1つ目の引数に何かが自動的に渡されることはない。
 では codice_3 が使われる。
 言語は、「codice_3」が使われることが名前の由来となっている。
 では codice_3 が使われる。
では codice_4 が使われる。