LoginSignup
0
0

More than 1 year has passed since last update.

railsチュートリアル 第4章 rubyにおけるクラス

Posted at

Rubyにおけるクラス

Rubyではあらゆるものがオブジェクト
この節では実際にオブジェクトをいくつか定義してみる。
メソッドをまとめるのにクラスを使っています
クラスからインスタンスが生成されることでオブジェクトが作成

コンストラクタ

これまで示した多くの例の中でも、クラスを使ってオブジェクトのインスタンスを作成してきたのです。
例えばダブルクォートを使って文字列のインスタンスを作成しました。
これは文字列のオブジェクトを暗黙で作成するリテラルコンストラクタです。

>> s = "foobar"       # ダブルクォートは実は文字列のコンストラクタ
=> "foobar"
>> s.class
=> String

文字列がclassメソッドに応答しており、その文字列が所属するクラスを単に返している。
明示的に同等の名前付きコンストラクタを使う。
名前付きコンストラクタは、クラス名に対してnewメソッドを呼び出す。

>> s = String.new("foobar")   # 文字列の名前付きコンストラクタ
=> "foobar"
>> s.class
=> String
>> s == "foobar"
=> true

リテラルコンストラクタと等価ですが、動作の内容が明確に示されています
配列でも、文字列と同様にインスタンスを生成できます

>> a = Array.new([1, 3, 2])
=> [1, 3, 2]

ハッシュの場合は若干異なる。
Array.new は配列の初期値を引数に取りますが、
Hash.new はハッシュのデフォルト 値を引数に取る。
これは、キーが存在しない場合のデフォルト値です。

>> h = Hash.new
=> {}
>> h[:foo]            # 存在しないキー (:foo) の値にアクセスしてみる
=> nil
>> h = Hash.new(0)    # 存在しないキーのデフォルト値をnilから0にする
=> {}
>> h[:foo]
=> 0

メソッドがクラス自身に対して呼び出されるとき、このメソッドをクラスメソッド
クラスのnewメソッドを呼び出した結果は、そのクラスのオブジェクトであり、これはクラスのインスタンスとも呼ぶ。
lengthのように、インスタンスに対して呼び出すメソッドはインスタンスメソッドと呼ぶ。

演習

1.リテラルコンストラクタとは?
隠れてインスタンスを作成
newメソッドを使わずインスタンスを作成することかな。

2.Rangeクラスとnewメソッドを使って、1から10の範囲オブジェクトを作れ。

>> Range.new(1,10)
=> 1..10

3.比較演算子==を使って、上記2つの課題で作ったそれぞれのオブジェクトが同じであることを確認しろ。

a = Range.new(1,10)
=> 1..10
>> b = 1..10
=> 1..10
>> a == b
=> true
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0