This_(プログラミング)とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > 百科事典 > This_(プログラミング)の意味・解説 

this (プログラミング)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/12/11 08:29 UTC 版)

thisは、プログラミング言語に出てくる概念のひとつで、自身の動いているオブジェクトを指す予約語。主にインスタンスメソッド内で使用される。thisの他にselfMeといった語を使う言語もあるが、言語を問わず概念は共通しているので、以下ではthisで代表させて記述することとする。

概要

thisは現在のオブジェクトを指した参照、あるいはポインタであり、たいていの場合は変更不可能である。

オブジェクトが生成すると、thisへの参照はつねに有効なものとなる。これは明示的に参照しなければならない言語もあれば、静的スコープで暗黙のうちに解決している言語もある。ただし、thisを暗黙のうちに解決する言語でも、明示的にthisを必要とする場面(ローカル変数で隠蔽されている同名のメンバー変数を参照する場合や、自身への参照を返り値とする場合など)もある。

thisはメソッドへの引数となっている。例えば、C++で書いた以下のようなメソッドは、

int foo::print (bar x)

本質的にはC言語での以下のような呼び出しに相当している。

int foo_print (foo *const this, bar x)

PythonPerl 5など、言語によってはthisをメソッドへの1つ目の引数として明記する必要がある。この引数の名前をthisselfとする必然性はなく、他の引数と同様にどんな名前を付けても文法上問題はない。ただし、通常の場合、PythonやPerlでは慣習的にselfが使われる。

GCCなど、一部のC++コンパイラでは、thisを引数に明示することで、その型を別なポインタに変えることができる[1]

C++Javaでの静的メソッドはインスタンスに対応せずクラスに所属するものであるため、thisは使えない。PythonRubySmalltalkObjective-Cなどでは、「クラスオブジェクト」のメソッド(クラスメソッド)となっていて、thisはクラスオブジェクトを指す。

言語ごとの事情

C++

初期のバージョンの C++ ではthisを変更でき、メソッド内から動作するオブジェクトを切り替えることができたが、のちに不可能となり、this右辺値となっている[2]

初期の C++ には参照がなかったが、もし最初から参照があったとしたら、thisはポインタではなく参照となっていたであろう[3]

C++ では、delete thisとすることで、オブジェクトが自ら消えることができる。

C#

C# では、thisは現在のインスタンスのメンバーを参照するのに用いられる。

特徴的な点として、C#の値型ではメンバー参照に加え、thisを代入式の左辺に置いて自分自身の値を書き換えることができる。 C#7.2で追加されたreadonly構造体では、このthisの書き換えを禁止できる。

struct MyStruct {
    // 読み取り専用フィールド
    public readonly int Num;

    public MyStruct(int num) {
        Num = num;
    }

    public void ChangeThis() {
        // 自分自身を書き換える
        // フィールドは読み取り専用にもかかわらず、全体が書き換わる
        this = new MyStruct(Num + 1);
    }
}

// readonly構造体ではこの書き換えはできない。
readonly struct MyStruct {
    // ...
}

Dylan

Dylan では多重ディスパッチが行われ、thisという概念がないが、メッセージをあるオブジェクトに送るという意識は文法に残っている。下に示した2つの記法は糖衣構文であり、同等に動作する。

  • object.method(param1, param2)
  • method (object, param1, param2)

Java

Java では、thisは現在のインスタンスを指すキーワードであり、クラスの値やメソッドを参照するのに用いられる。Java ではインスタンスメソッドがすべて仮想メソッドなので、thisnull となることはない。

JavaScript

プロトタイプベースオブジェクト指向言語である JavaScript では、関数はオブジェクトに属している(メソッドである)ことも、属さないでいる(ただの関数である)こともできる。したがって、thisが何を指しているかは、関数の呼び出し方によって異なっている。

多くの場面では、クラスベースオブジェクト指向言語の this と同じように使うことができる。たとえば、

object.notify = function () { alert (this); };
object.notify();

のように関数(object.notify)をメソッドとして呼び出した場合、thisobjectを指す。また、

Counter = function () { this.counter_value = 0; };
c = new Counter();

のように new を付けて関数(Counter)をコンストラクタとして呼び出した場合、this は新しく生成されるオブジェクトを指す[4]

関数を単独で呼び出す場合は、thisはstrict-mode中であればundefinedであり、そうでなければグローバルオブジェクトを指すが、thisが何を指すかを個別に指定して呼び出すこともできる。(Function.prototype.apply) [5]

Object Pascal

Object Pascal では self が使われる。

Objective-C

Objective-C では self が使われる。

PHP

PHPでは、this が使われる。

Python

Python では、thisは文法上の予約語ではないが、自動的に対象となるオブジェクトが渡される、メンバ関数の1つ目の引数となっている。慣習的に、この引数の名前としてselfが使われる。classmethod修飾子を付けて定義されたクラスメソッドでは、1つ目の引数にクラスオブジェクトそのものが渡される。staticmethod修飾子を付けて作られた静的メソッドでは、1つ目の引数に何かが自動的に渡されることはない。

Ruby

Ruby では self が使われる。

Self

Self 言語は、「self」が使われることが名前の由来となっている。

Smalltalk

Smalltalk では self が使われる。

Visual Basic

Visual Basicでは Me が使われる。

脚注

外部リンク


「this (プログラミング)」の例文・使い方・用例・文例

Weblio日本語例文用例辞書はプログラムで機械的に例文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

This_(プログラミング)のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



This_(プログラミング)のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのthis (プログラミング) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
Tanaka Corpusのコンテンツは、特に明示されている場合を除いて、次のライセンスに従います:
 Creative Commons Attribution (CC-BY) 2.0 France.
この対訳データはCreative Commons Attribution 3.0 Unportedでライセンスされています。
浜島書店 Catch a Wave
Copyright © 1995-2025 Hamajima Shoten, Publishers. All rights reserved.
株式会社ベネッセコーポレーション株式会社ベネッセコーポレーション
Copyright © Benesse Holdings, Inc. All rights reserved.
研究社研究社
Copyright (c) 1995-2025 Kenkyusha Co., Ltd. All rights reserved.
日本語WordNet日本語WordNet
日本語ワードネット1.1版 (C) 情報通信研究機構, 2009-2010 License All rights reserved.
WordNet 3.0 Copyright 2006 by Princeton University. All rights reserved. License
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
「斎藤和英大辞典」斎藤秀三郎著、日外アソシエーツ辞書編集部編
EDRDGEDRDG
This page uses the JMdict dictionary files. These files are the property of the Electronic Dictionary Research and Development Group, and are used in conformance with the Group's licence.

©2025 GRAS Group, Inc.RSS