【Ruby入門】classのnewとinitializeについてまとめ

【Ruby入門】classのnewとinitializeについてまとめ

こんにちは!Webコーダー・プログラマーの貝原(@touhicomu)です。

今日は、Rubyclassの定義、newメソッド、inistializeメソッドについて解説します。

この記事では、

  • classを定義する方法
  • classをnewで作成する方法
  • newとinitializeの関係

という基本的な内容から、

  • initializeの基本的な使い方
  • initializeの応用的な使い方

などの応用的な使い方に関しても学習していきます。

このページで、Ruby classの定義、newメソッド、inistializeメソッドの使い方をよく把握して自分のスキルとしていきましょう!

classとは

classとは、プログラムの中で使う変数などのデータとそのデータを取り扱うメソッドをひとかたまりにまとめたものです。

データはclassのメソッドにより値を取得したり値を変更したりするようにします。

このようにすることで、classのデータを取得するコード、変更するコードがclassの中だけに集まることになります。

このことにより、コードを保守したり、今後の開発の進捗や仕様変更時に、コードを変更する箇所を、classのデータやメソッドを変更するだけですみます。

このように、classを導入することによりコードの保守や変更に対して、開発効率が高まるというメリットがあります。

classを定義する方法

Rubyclassを使うには、まず、コード中でclassを定義する必要があります。

以下、疑似コードで確認しましょう。

上のコードは、classを定義するのに最低限のコードです。

まず、classの後にクラス名があります。

また、class~endの間にinitializeメソッドがあります。

initializeメソッドはclassがnewされた際に呼び出されるメソッドで、主にclassのデータの初期化処理を行います。

まずは、コード中でclassの定義は上の例のように行うということを覚えておいてください。

classをnewで作成する方法

classの定義はしましたが、そのままではclassをコード中で使用できません。

classのnewメソッドによって、classをインスタンス化する必要があります。

インスタンス化とは、classの定義をもとに新たな変数を作成することです。

具体的な例を見てみましょう。

実行結果:

上のコードでは、Hello.newメソッドを使って、Helloクラスをインスタンス化、つまり変数化しています。

その後、変数helloに対してtalkメソッドを実行するよう命令しています。

その結果、Helloクラスのtalkメソッドが実行され、「hello, world」が出力されています。

このように、classは定義したままでは使用できず、newメソッドによりインスタンス化して初めて、classのメソッドが使用できるようになります。

newとinitializeの関係

今までの章でclassとnewメソッドに関係がわかりました。

では、initializeメソッドはどのような用途に使用されるのでしょうか?

initializeメソッドはnewメソッドが呼び出された際に呼び出されます。

また、newメソッドに渡された変数も、そのままinitializeメソッドに渡されます。

これを利用し、initializeメソッドでは引数を元にclassのデータの初期化を行います。

これがinitializeメソッドの主な用途です。

実際のサンプルコードを見ていきましょう。

実行結果:

以上のように、newメソッドに渡した引数がinitializeメソッドの引数nameとして渡されています。

initializeメソッドでは引数nameを元にクラス変数@@name初期化しています。

最後に、変数helloに対しtalkメソッドを実行し、クラス変数@@nameに従った出力を行っています。

クラス変数がわからないという方はこちらの記事を参考にしてください。

クラス変数、インスタンス変数、クラスインスタンス変数の違いがわかりやすくまとめられています。

initializeの基本的な使い方

initializeを使う方法

前章でも述べた通り、Rubyのクラスのinitializeメソッドはクラスがnewされた際に一度だけ実行されるメソッドです。

initializeメソッドはクラスの初期化を行いことが主な役目です。

もう一つ、実際にサンプルコードを確認してみましょう。

実行結果:

上のコードでは、クラス変数の代わりにクラスのインスタンス変数を使用しています。

classのインスタンス化時に、newの引数に”Kevin”を与えて実行しています。

newが呼ばれた際にHelloクラスのinitializeメソッドが呼び出され、newの引数initializeの引数に渡されます。

initializeでは、引数をもとにインスタンス変数@username初期化しています。

その後Helloクラスのtalkメソッドを呼び出した際に、@usernameがきちんと初期化した通り表示されています。

このように、newメソッドに渡した引数をinitializeメソッドでクラス変数やインスタンス変数を初期化します。

その後、talkなどのインスタンスメソッドで初期化されたクラス変数やインスタンス変数を使用し、データを加工して実行することがclassとnew、initializeの基本的な使用方法です。

複数のinitializeは定義できない

initializeは複数定義してオーバーロードできません。

実際に例をみてみましょう。

実行結果:

Helloクラスの一番目のinitializeメソッドを使用しようとするとエラーがでます。

これは、一番目のinitializeメソッドの定義が、二番目のinitializeメソッドの定義で上書きされてしまっているからです。

そのため、一番目のinitializeメソッドの定義はもう存在せず、それを使おうとするとエラーとなります。

子クラスから親クラスのinitializeを呼ぶ方法

クラスは、そのデータメソッドをそのまま引き継いで、子供のクラスを作成できます。

子供のクラスのことを子クラスと言います。

親クラスから子クラスへデータやメソッドを引き継ぐことを継承と言います。

継承した子クラスから親クラスのinitializeメソッドを呼ぶには、superというメソッドを呼びます。

superとは親という意味で、superメソッドが親クラスのinitializeメソッドにつながっています。

実行結果:

子クラスで受け取ったnamesuperに渡して、親クラスのinitializeメソッドを呼び出し、変数@nameを初期化できています。

子クラスwho?メソッドでも親クラスの@nameを使用できています。

initializeでのreturnとorverrideについて

initializeでのreturn

initializeメソッド内ではreturnは使えません。

以下、実際のコードで確かめてみましょう。

実行結果:

return したsがs2に入っているはずですが、両者は別のオブジェクトとして判定されていますね。

これは、newの返値はinitializeの返値ではなく、初期化されたオブジェクトであるためです。

initializeの返値は使用されません。

そのためreturnしても返値は使用されません。

initializeでのorverride

initializeメソッド重複して定義するたびに、最後に定義されたinitializeメソッドが使用されます。

実際にコードで確認してみましょう。

以下のコードではArrayクラスに新たにinitializeメソッドを定義して通常のArrayのinitializeメソッドを上書き(override)しています。

このカスタマイズしたArrayクラスのインスタンス変数は通常の配列としても使用できています。

実行結果:

以上のように、組み込みクラスArrayであっても、initializeメソッドをoverrideできます。

また、initializeをoverrideしてカスタマイズしたArrayは、通常の配列(Array)としても使用できています。

まとめ

今回は、Ruby classの定義、newメソッド、inistializeメソッドについて学習しました!

学習のポイントを振り返ってみましょう!

  • classは定義した後、newメソッドでインスタンス化して使用する。
  • newメソッドを実行した際に、initializeメソッドが実行される。
  • newメソッドの引数は、そのままinitializeメソッドに渡される。
  • initializeメソッドは複数は用意できない。initializeを定義するたびに以前のinitializeが上書きされる。
  • superメソッドによって、子クラスから継承元の親クラスのinitializeメソッドを呼び出せる。
  • initializeメソッドではreturnできない。

以上の内容を再確認し、ぜひ自分のプログラムに生かし学習を進めてください!

Rubyカリキュラム無料公開中!

この記事はRuby入門完全攻略ガイド【基礎学習/アプリ開発/仕事獲得】の一部になります。このカリキュラムは、プログラミング入門者が、基礎学習からアプリ開発、さらには仕事獲得まで体系的に学べる内容となっています。

Ruby学習に必要な情報を一つにまとめていますので効率よくRubyを学ぶことが出来ます。この機会に是非活用していただければと思います。

【Ruby入門ガイド】アプリ開発で知っておくべき知識を総ざらい
更新日 : 2018年11月23日

Rubyを最短で習得したい方へ

近年では様々なWEBサービスが流通するようになりました。

WEBサービスの普及が進むにつれて、それらを素早く開発するのに長けたRubyの人気は今後さらに増し、Rubyエンジニアの需要も自ずと増えることは間違いなしでしょう。

元々ITリテラシーの高い方や他言語を習得している方であれば、独学でRubyを習得することが可能です。

ただし、プログラミング学習をしている方の多くは

「自分に合った教材が見つけられずに挫折してしまった」
「勉強のための勉強になってしまい、ゴールが見えない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決するのに何日もかかってしまう」

このような悩みを抱えたまま挫折してしまうのが現実となっています。

  • もう挫折したくない
  • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
  • 自分だけのカリキュラムで効率的に勉強したい
  • WEBアプリケーション開発までしっかりサポートして欲しい
そんな方はお気軽に侍エンジニア塾までご相談ください。

お一人お一人に専属のインストラクターがつくので、初心者の方がつまづきがちな、「CookPad」、「Wantedly」、「食べログ」のようなWEBアプリケーション開発方法もスムーズに学習することできます。

実際にオリジナルWEBアプリを開発し、成果物として認められて仕事獲得に成功した塾生は数多くいます。

このように、オリジナルアプリ開発から仕事獲得まで徹底的にサポートすることでプログラミング初心者の方でも安心して基礎学習に取り組むことができます。

まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方法やカリキュラムを考えてみませんか?

Rubyならではの学習方法や、現役フリーランスRubyエンジニアから貴重なアドバイスを受けることができます。

詳しくは下の画像から弊社サービス内容をご確認ください。

ruby_a2

非常識な結果を出す卒業生多数!

エンジニアキャリア戦略

人気記事セレクション

3000名以上来場の人気セミナーが開催決定

18歳で時給6000円だった侍エンジニア塾代表の木内より、『プログラミングで人生を変える』ための学習方法をお教えます。

0からプログラミングを習得し、フリーランスエンジニアになる方法プログラミング学習の効率を劇的に上げる学習メソッドを解説しますので、奮ってご参加ください。

  • 日付:4/20(土),4/27(土)
  • 時間:14:00〜17:35終了予定
  • 場所:当社 道玄坂オフィス
  • 住所:〒150-0043 東京都渋谷区道玄坂2丁目11-1 Gスクエア渋谷道玄坂 4F *Googleマップでは「東京都渋谷区道玄坂2丁目11-1」で検索してください。近隣にスクエア渋谷という別のビルがあるためご留意ください。
  • 参加費:無料
  • URL:https://seminar.sejuku.net/
詳しくは下の画像をクリックして弊社セミナー内容をご確認ください。

LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

貝原 輝昌

貝原 輝昌

こんにちは!貝原(@touhicomu)と申します。
現在は、Web業界のフリーランスとして、主にPHP/WordPress/BuddyPress/VPSサーバー構築などの業務を受注しています。
現住所は、日本の西海岸、長崎県は波佐見町です。田舎ライフです。^^
地元の観光団体「笑楽井石」にボランティアでほたる撮影会やそば塾などのスタッフとして参加させて頂いています。
以下の活動も行っています。
 ・笑楽井石のブログ
 ・エクセル関数を日本語化するソフト
 ・エクセルVBAを日本語で記述するソフト