TOPシステム開発> 第2回:Rubyを動かそう! (2/3)

いまさら聞けないRuby入門

いまさら聞けないRuby入門

第2回:Rubyを動かそう!

著者:伊藤忠テクノソリューションズ  大場 光一郎

公開日:2007/12/3(月)

name(名前)やage(年齢)のデータを加える

Dogクラスにデータとしてname(名前)とage(年齢)を持たせましょう(リスト4)。

「def」がクラスにメソッドを定義するキーワードになります。「def」から「end」までがメソッドの定義です。「initialize」はメソッド名です。この名前をつけたメソッドは、クラスを初期化をするための特別なメソッドになります。

次に名前を答えるメソッドを追加します(リスト5)。

また、今まで定義したDogクラスを使うには「インスタンス化」する必要があります。インスタンス化されたクラスはメモリ上に確保され、処理を実行できるようになります。

図のようにクラスを使ってデータとメソッドをまとめた型を作り、インスタンス化して実行するのがRubyプログラムの基本になります。インスタンスにはそれぞれ別のデータを渡すことができるため、Dogクラスから太郎インスタンスや花子インスタンスが生成できるのです。

initializeメソッドで使った「@name」のように「@」を使った変数はインスタンスごとに保持するデータとなります。これをインスタンス変数と呼びます。

リスト4:nameとageのメソッドの定義
 irb(main):010:0> class Dog
  irb(main):011:1>   def initialize(name, age)
  irb(main):012:2>     @name = name
  irb(main):013:2>     @age = age
  irb(main):014:2>   end
  irb(main):015:1> end
  => nil

リスト5:名前を答えるメソッドの追加
 irb(main):020:0> class Dog
  irb(main):021:1>   def name
  irb(main):022:2>     @name
  irb(main):023:2>   end
  irb(main):024:1> end
  => nil

リスト6:newメソッド
 irb(main):030:0> taro = Dog.new("taro", 5)
  => #<Dog:0x2987964 @age=5, @name="taro">

リスト7:インスタンスに対してメソッドを呼びたい時
 irb(main):040:0> taro.name
  => "taro"

図2:クラスとインスタンス
図2:クラスとインスタンス

さて、今まで定義したDogクラスに、「太郎」や「花子」といった具体的な名前を格納したいと思います。そのためには、Dogクラスのインスタンスが必要です。クラスとインスタンスの関係は、「定義」と「実体」です。例えば、「犬」という概念がクラスに対応し、隣の家のポチという具体的な存在がインスタンスということになります。

では実際にインスタンスを作成してみましょう。Rubyではインスタンス生成のためにデフォルトで用意されている「new」メソッドを使います(リスト6)。

Dogクラスからtaroインスタンスが生成され、taro変数へ格納しました。これでtaroインスタンスへのアクセスにはtaro変数が使えるようになります。ではtaroインスタンスに名前を問い合わせてみましょう。先ほど実装したnameメソッドを呼び出します。インスタンスに対してメソッドを呼びたい時は「.」を使います(リスト7)。

taroインスタンスが名前を答えてくれましたね。Rubyでは「taro.name」の「.」の左側、つまりtaroインスタンスを「レシーバ」と呼びます。

実習2

いろいろな値を与えてDogインスタンスをたくさん生成してみましょう。Dogクラスに年齢を答えるageメソッドを追加してみましょう。そのとき、すでに生成したインスタンスは変化するか確認してみましょう。また変数に格納しないインスタンスがどうなるか観察してみましょう。同じ変数に新たなインスタンスを代入してもよいでしょう。

クラスまとめ

Rubyのクラスやインスタンスといった用語やその働きを実際に動かしながら解説してきました。

これらはオブジェクト指向プログラミングの考え方が基本となっています。オブジェクト指向プログラミングとは、大雑把にいってプログラムをオブジェクトを作ることで実現していく手法です。オブジェクトとは、データと振る舞いがセットになったもので、クラスによって定義され、インスタンスとしてメモリ上を流通します。

Rubyはシンプルな文法でオブジェクト指向をサポートしており、オブジェクトの振る舞いやデータをクラスに定義してプログラミングをします。Rubyプログラミングと共にオブジェクト指向プログラミングに慣れ親しんでいきましょう。 次のページ


前のページ  1  2  3  次のページ


伊藤忠テクノソリューションズ株式会社 大場 光一郎
著者プロフィール
伊藤忠テクノソリューションズ株式会社  大場 光一郎
社内のRuby推進に従事。個人的にBookScopeの開発に協力する傍ら、オープンソースへの活動としてMeadowプロジェクトに参加したり、JRubyの開発に協力したりしている。最近、Java Expert #02へJRubyの記事を書いた。

Meadow
http://www.meadowy.org/meadow/
BookScope
http://bookscope.net/
暮らしの業
http://ko.meadowy.net/~koichiro/diary/


INDEX
第2回:Rubyを動かそう!
  プログラムを動かそう
name(名前)やage(年齢)のデータを加える
  ブロック