.NETエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnet.NETナビ
  2. .NETコラム
  3. プログラミング言語
  4. Ruby
  5. Railsにおいてinitializeを使うときのポイント|サンプルコードも紹介

Railsにおいてinitializeを使うときのポイント|サンプルコードも紹介

  • Ruby
  • プログラミング言語
公開日時:   更新日時:
Railsにおいてinitializeを使うときのポイント|サンプルコードも紹介
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>
    システム
    エンジニア
    Rubyのコンストラクタとはどのようなものですか。
    プロジェクト
    マネージャー
    Rubyのコンストラクタとは、主にクラスのデータ初期化処理を行う特別なメソッドのことです。

    Railsにおけるコンストラクタ「initialize」とは


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

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

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

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

    Railsにおけるコンストラクタを使うときのポイント7つ


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

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

    1:initializeが持つnewとの関係性を把握する

    initializeは、newメソッドから変数を渡される関係にあります。

    newメソッドに渡した引数がinitializeメソッドの引数nameとして渡されている例を紹介します。

    実行結果は、

    です。

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

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

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

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

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

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

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

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


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

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

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


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

    3:キーワード引数

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

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

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

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

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

    4:コンストラクタのreturn

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    7:親クラスと子クラスの関係性を理解する

    Ruby on Railsにおいて、superメソッドを利用することで親クラスの引数を子クラスに全部自動的に呼び出します。

    例えば、

    こちらのコードを実行すると、

    となります。

    Railsでのinitializeを使ったサンプルコード


    実際にRailsにおいてHumanクラスを作成して名前を設定するコードは、

    このようなコードになります。実際に書いてみると、

    このコードを実行すると「私がいます」と出力されます。

    システム
    エンジニア
    Rubyにはコンストラクタであるinitializeメソッドが用意されているのですね。
    プロジェクト
    マネージャー
    実際にソースコードを自分で書いてみると、もっと理解が深まりますよ。

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


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

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

    FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    Ruby新着案件New Job