コンストラクタとは? わかりやすく解説

コンストラクタ

【英】 Constructor

クラスにおいて、オブジェクト生成時に呼び出される特殊な関数。これにより、オブジェクト使用する前に必要な初期化を行うことができる。

PHPでコンストラクタを定義する場合クラス名と同じメソッド名、あるいはPHP 5からは__constructメソッドとして記述する

関連用語


コンストラクタ

別名:構築子
【英】constructor

コンストラクタとは、C++Javaのようなオブジェクト指向言語において、インスタンス生成時に呼び出されるメソッドのことである。戻り値返すことができないのも、通常のメソッドとは異なる点である。

一般的に、コンストラクタでは初期化処理を行うが、処理の記述必須ではない。また、一つクラスの中で、引数の型や数の違うコンストラクタを持つことができ、それらはインスタンス生成時の呼び出し方により使い分けられる。

なお、インスタンス消滅時に呼ばれるメソッドデストラクタ消去子)と呼ぶ。

プログラミングのほかの用語一覧
オブジェクト指向:  ポリモーフィズム  IDL  カプセル化  コンストラクタ  コンポーネント  メソッド  密結合

コンストラクタ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/07 07:40 UTC 版)

ナビゲーションに移動 検索に移動

コンストラクタ: constructor)は、オブジェクト指向プログラミング言語で新たなオブジェクトを生成する際に呼び出されて内容の初期化などを行なう関数あるいはメソッドのことである。対義語はデストラクタ

オブジェクトの生成は、

  1. メモリ割当(: allocation
  2. 初期化(: initialization

の二段階を経て行なわれるが、コンストラクタを持つプログラミング言語ではメモリ割り当ては言語機能に組み込まれ、初期化用のコードのみを記述するのが普通である。

JISでは、「構築子」という直訳が割り当てられている規格もあるが[注釈 1]、「コンストラクタ」という用語が使われている規格もある[注釈 2]

長音符を付けた「コンストラクター」という表記を採用しているドキュメントもある[4][5]

クラスベース言語でのコンストラクタ

C++JavaC#PHPなど、クラスベースのオブジェクト指向言語では、コンストラクタはクラスのメンバとして定義される。

C++、Java、C#のコンストラクタは、「クラス名と同一の名前を持ち、戻り値指定のない関数(メソッド)」であるかのような記法となっている。以下にJavaの例を示す。

class SomeClass {
    SomeClass(/*引数リスト*/) {
        // 初期化用のコード
    }
}

SomeClass obj = new SomeClass(/*引数リスト*/);

なお、コンストラクタについて「クラス名と同一の名前を持つ関数(メソッド)」と説明している場合がある[要出典]が、C++やJavaでは厳密にいえばこれは誤りであり、コンストラクタには名前はない。C++では「クラス名と同一の名前を持つメンバー関数」を定義することはできない。一方、Javaでは「クラス名と同一の名前を持つメソッド」を、コンストラクタとは別に定義可能であるが、これは混乱を招くだけでなく、「クラス名を大文字で始め、メソッド名を小文字で始める」というJava公式の慣習に反することにもなるため、通例コーディング規約で禁止または非推奨とされている[6][7]

また、PHPでは__constructRubyではinitializeというように、特定の名前を持つメソッドを作ればそれがコンストラクタになる、というプログラミング言語も存在する。

コンストラクタに渡す引数により初期化のバリエーションが定義される。特にパターンとして名前をもつコンストラクタは以下である。

デフォルトコンストラクタ
引数なしで呼び出すことができるコンストラクタのことである。通常は引数のないコンストラクタであるが、C++ では全ての引数にデフォルト引数が指定されているコンストラクタも引数なしで呼び出すことが可能なためデフォルトコンストラクタと呼ばれる。
コピーコンストラクタ
同一クラスのオブジェクトを基に、同一内容のオブジェクトを作成するコンストラクタ。複製を作る。ムーブコンストラクタと異なり、コピー元のオブジェクトが書き換えられることはない。
ムーブコンストラクタ
同一クラスのオブジェクトを基に、同一内容のオブジェクトを作成するコンストラクタ。コンストラクタ内では、内部状態をムーブ元のオブジェクトから自身のオブジェクトに移動する。すなわち、ムーブ元のオブジェクトの内容は破壊される(ムーブコンストラクタ実行前と異なる状態となる)。C++11で正式に導入された[8]
変換コンストラクタ
別の型からの暗黙変換を提供するコンストラクタ。C++において、explicit指定されておらず、1つだけ引数を受け取るコンストラクタは変換コンストラクタ (converting constructor) になり、明示的なコンストラクタ呼び出しの記述を省略できる[9]。2つ以上の引数を受け取り、2つ目以降にデフォルト引数が指定されているコンストラクタも対象になる。
コンストラクタチェーン
引数の異なる複数のコンストラクタをチェーンのように一つのコンストラクタへ結び付けること。単純なものから複雑なものへ流すことで初期化コードの重複を防ぐ。C++11では委譲コンストラクタが言語機能として実装された。

JavaScriptのコンストラクタ

JavaScriptプロトタイプベースのオブジェクト指向言語であるため、クラスは存在せず、new演算子付きで通常の関数を呼び出すことで、コンストラクタとして動作させる[10]。コンストラクタとして呼び出された関数では、thisは新しく生成されるオブジェクトを指すようになり[10]、また prototype プロパティも設定される[11]

なお、ECMAScript 2015 (ES6) 以降はキーワード class をサポートし、class の関数プロパティ constructor としてコンストラクタを定義し new 演算子に渡される式で暗黙に呼び出される[12]

脚注

[脚注の使い方]

注釈

  1. ^ JIS X 3015「プログラム言語C#」[1]では、instance constructorをインスタンス構築子、static constructorを静的構築子、default constructorを省略時構築子と訳している。JIS X 3060「ECMAScript言語」[2]では構築子という訳語が使われている。
  2. ^ JIS X 3014「プログラム言語C++」[3]を参照。

出典

  1. ^ JISX3015 2008.
  2. ^ JISX3060 2000.
  3. ^ JISX3014 2003.
  4. ^ コンストラクター - C# プログラミング ガイド | Microsoft Docs
  5. ^ コンストラクターとデストラクターの概要 (C++ のみ) - IBM Documentation
  6. ^ Javaコーディング規約 | Future Enterprise Coding Standards
  7. ^ Java: Non-constructor methods should not have the same name as the enclosing class
  8. ^ Mayers, Scott「3章 現代のC++への移行 項目17:自動的に生成される特殊メンバ関数を理解する」『Effective Modern C++』千住治郎、オーム社、2015年9月16日、107頁。ISBN 978-4-87311-736-2。「C++11から、ムーブコンストラクタとムーブ代入演算子の2つが追加されました。」
  9. ^ Converting constructor - cppreference.com
  10. ^ a b 山田祥寛 (2007年9月25日). “連載:Ajax時代のJavaScriptプログラミング再入門 第4回 JavaScriptでオブジェクト指向プログラミング Page1”. @IT. 2011年12月13日閲覧。
  11. ^ 山田祥寛 (2007年9月25日). “連載:Ajax時代のJavaScriptプログラミング再入門 第4回 JavaScriptでオブジェクト指向プログラミング Page2”. @IT. 2011年12月13日閲覧。
  12. ^ "Jordan Harband" (2021年6月24日). “"ECMA-262::15.7 Class Definitions"”. ECMAインターナショナル. 2021年7月1日閲覧。

参考文献

関連項目


コンストラクタ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/08 02:09 UTC 版)

Javaの文法」の記事における「コンストラクタ」の解説

コンストラクタはオブジェクト割り当てられ後すぐに呼び出されオブジェクト初期処理を行う。コンストラクタは典型的にnewキーワードを使用して呼び出されるが、リフレクション使用して呼ぶこともできるリフレクション機能はjava.lang.reflectパッケージより提供される。 コンストラクタを宣言する際に使える修飾子アクセス修飾子のみである。 可能ならばオブジェクトひとたびコンストラクタを呼ばれた以後直ちに有効かつ有意味オブジェクトとなるべきである。分割され複数初期化メソッドを使わなければ初期処理が完了しないというような設計好ましくない慣習として、引数としてそのオブジェクト自身の型を受け取ってデータメンバを複写するようなコンストラクタを「コピーコンストラクタ」と呼ぶ。 コンストラクタが明示的に定義されていない場合コンパイラ暗黙のうちに内容が空で引数取らないデフォルトのコンストラクタを生成する。 コンストラクタはオーバーロードできる。 コンストラクタ内の最初の文は親クラスのコンストラクタ:super(...);または同じクラス内の別のコンストラクタ:this(...);を呼び出せる。 もし、super(...) または this(...)に対す明示的な呼び出しがないならば、コンストラクタ本体実行される前に親クラスデフォルトコンストラクタsuper();が呼ばれる

※この「コンストラクタ」の解説は、「Javaの文法」の解説の一部です。
「コンストラクタ」を含む「Javaの文法」の記事については、「Javaの文法」の概要を参照ください。

ウィキペディア小見出し辞書の「コンストラクタ」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



固有名詞の分類


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

辞書ショートカット

すべての辞書の索引

「コンストラクタ」の関連用語

コンストラクタのお隣キーワード
検索ランキング

   

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



コンストラクタのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
PHPプロ!PHPプロ!
©COPYRIGHT ASIAL CORPORATION ALL RIGHTS RESERVED.
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2024 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリの【コンストラクタ】の記事を利用しております。
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのコンストラクタ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのJavaの文法 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。
Text is available under Creative Commons Attribution-ShareAlike (CC-BY-SA) and/or GNU Free Documentation License (GFDL).
Weblioに掲載されている「Wiktionary日本語版(日本語カテゴリ)」の記事は、Wiktionaryのコンストラクタ (改訂履歴)の記事を複製、再配布したものにあたり、Creative Commons Attribution-ShareAlike (CC-BY-SA)もしくはGNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS