.net column

.NET開発者のためのブログメディア

Rubyのコンストラクタについて解説|変数の初期化など

2020年07月14日
SE
Rubyのコンストラクタとはどのようなものですか。
PM
Rubyのコンストラクタとは、主にクラスのデータ初期化処理を行う特別なメソッドのことです。

Rubyのコンストラクタについて

今回は、Rubyのコンストラクタについて説明します。Rubyのコンストラクタとは、主にクラスのデータ初期化処理を行う特別なメソッドです。

Rubyのコンストラクタに興味のある方はぜひご覧ください。

コンストラクタとは

Rubyのコンストラクタとは、主にクラスのデータ初期化処理を行う特別なメソッドです。「initialize」という名前である必要があります。

コンストラクタはオブジェクト生成時に自動的に呼び出されます。

もちろん、初期化処理をする必要がなければコンストラクタを記述する必要がありません。コンストラクタを作成せずに、初期化用のクラスメソッドを用意してもよいです。

コンストラクタを利用すれば、newで自動的に呼び出されるので、わざわざ初期化用のメソッドを呼び出す必要がありません。

インスタンス変数の初期化

インスタンス変数は、@変数名で定義します。コンストラクタでインスタンス変数を初期化するには、以下のように記述します。

実際のソースコードを見てみましょう。

newの引数で渡されるname, ageをコンストラクタで初期化しています。

インスタンス変数はprivate扱いになります。また、クラス外からアクセスするには、ゲッター/セッターメソッドが必要です。

Rubyでは、アクセサメソッドが用意されています。使い方は「attr_accessor :変数名」と記述するだけです。ゲッター/セッターメソッドを自作しなくて良いので楽です。

アクセサメソッドを使ったソースコードを見てみましょう。

実行結果は以下のようになります。

コンストラクタで初期化し、アクセサメソッドで読み書きできることが分かります。

なお、person = Person.new()とすると、以下のように引数エラーになります。
wrong number of arguments (given 0, expected 2) (ArgumentError)

また、アクセサの設定は、以下のようにも記述できます。
attr_reader :変数名 → ゲッターのみ
attr_writer :変数名 → セッターのみ

用途に応じてアクセサの設定を変更してください。

キーワード引数

キーワード引数を指定して、初期化することもできます。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

キーワード引数にすることで、引数の順番を気にする必要がなくなります。また、直感的に分かりやすいと思います。

このように、キーワード引数を指定して、初期化することもできます。

コンストラクタのreturn

Rubyのコンストラクタはreturnできません。実行時エラーにはなりませんが、returnする意味がありません。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

コンストラクタからnilをreturnしていますが、インスタンス変数は設定されています。実行時エラーにはなりませんが、returnする意味がありません。

生成されたオブジェクトが返却されるので、returnを書く必要がありません。

コンストラクタのオーバーロード

Rubyのコンストラクタは複数定義できません。つまり、コンストラクタはオーバーロードできません。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

コンストラクタを複数定義してもエラーにはなりませんが、最後のコンストラクタのみが有効になります。

そのため、person1 = Person.new(“”Taro””)を実行すると、ArgumentErrorが発生します。このように、コンストラクタはオーバーロードできません。

コンストラクタのオーバーライド

Rubyでは、クラスを継承して、コンストラクタをオーバーライドできます。つまり、サブクラスで必要に応じて再定義できるということです。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

サブクラスのコンストラクタからスーパークラスのコンストラクタをsuperメソッドで呼び出しています。

サブクラスでは、新たにインスタンス変数student_noを追加しています。このように、クラスを継承して、コンストラクタをオーバーライドできます。

SE
Rubyにはコンストラクタであるinitializeメソッドが用意されているのですね。
PM
実際にソースコードを自分で書いてみると、もっと理解が深まりますよ。

Rubyのソースコードを書いてみよう

Rubyにはコンストラクタであるinitializeメソッドが用意されています。基本的に、初期化処理はコンストラクタで行います。

また、クラスを継承して、コンストラクタをオーバーライドできます。ご自身でRubyのソースコードを書いて、理解を深めてください。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)