Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Ruby入門第17回〜クラスを作る〜

Rubyについて簡潔にまとめたものを何回かに分けて投稿していきます。サクッと読めるようにしたいので一記事の長さはできるだけ短くしています。

環境

Ruby : Ruby 2.5.1
OS : macOS High Sierra バージョン 10.13.5

クラスを作る

Rubyにはあらかじめ様々なクラスが用意されていますが、クラスは自分で作ることもできます。クラスの作成は以下のようにやります。また、クラス名は必ず大文字で始めます。

helloworld.rb
class クラス名
end

helloworld.rb
class User
end

これでクラスを作ることはできましたが、これだけではあまり意味があまりません。次はインスタンスを作成します。

インスタンスを作る

インスタンスとは、クラスから生み出された具体的なデータです。クラスを学校のクラスと例えるならインスタンスはそのクラスの生徒に当たります。インスタンスは、newメソッドを使って作成します。

newメソッド

newメソッドは、クラスに対して使います。newメソッドを使うことでそのクラスのインスタンスを生成します。

helloworld.rb
class クラス名
end

クラス名.new

helloworld.rb
class User
end

taro = User.new

インスタンスメソッド

クラスの中で定義し、インスタンスに対して使うメソッドをインスタンスメソッドと言います。インスタンスメソッドは、クラスから生み出されたインスタンスからしか呼び出すことができません。以下のような書き方になります。

helloworld.rb
class クラス名
 def メソッド名
  処理
 end
end

helloworld.rb
class User

 def greeting
  puts "Hello!"
 end

end

taro = User.new
taro.greeting
ターミナル
MacBook-Pro-od-hoge:~ hoge$ ruby helloworld.rb
Hello!

initializeメソッド

インスタンスは変数を使って値を保持することができます。インスタンスが生成された際に値を持たせることができるのがこのinitializeメソッドです。newメソッドが呼ばれた際にこのメソッドも呼び出されます。

helloworld.rb
class クラス名
 def initialize
  処理
 end
end
変数 = クラス名.new(引数)

helloworld.rb
class User
 def initialize(name)
  @name = name
 end
end

taro = User.new("taro")

インスタンス変数

インスタンスの中で値を保持しておくために使われるのがインスタンス変数です。インスタンス変数は、クラス内であれば全メソッドで使用できます。インスタンス変数を定義する際は、変数名の前に「@」を1つつけます。

helloworld.rb
class クラス名
 @変数名 = 代入する値
end

helloworld.rb
class User
 def initialize(name)
  @name = name
 end

 def greeting
  puts "Hello, I'm #{@name}"
 end
end

taro = User.new("taro")
taro.greeting
ターミナル
MacBook-Pro-od-hoge:~ hoge$ ruby helloworld.rb
Hello, I'm taro

終わりに

これでRuby入門第17回〜クラスを作る〜は終了です。それではまた。

参考

インスタンス変数 - RubyLife
インスタンスメソッド - RubyLife

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?