Ruby
オブジェクト指向
クラス
インスタンス

【Ruby】クラスとかインスタンスについて改めて学習してみた

株式会社diffeasy中尾です。

エンジニアになってもうすぐ半年になります。

アドベントカレンダー4日目で何を書こうか迷いましたが、知識がモヤっとしている事を整理しようと思いました。

そこで、普段Railsを使用しているのですが、クラスとかインスタンスが自分の中でモヤっとしていたので「楽しいruby」で復習してみました。

https://www.amazon.co.jp/dp/4797386290/ref=cm_sw_r_tw_dp_U_x_vesbCbC09HZZV


イメージ

クラスが型で、その型から生成したものがインスタンスと良く書かれてますが、スマートフォンでイメージを整理してみました。

スクリーンショット 2018-09-16 16.29.42.png

スマートフォンクラスに、スマートフォン共通の機能を持たせ、Android・iOSインスタンスでそれぞれ独自の機能を持たせるイメージですかね。


クラスについて

では、クラスについてです。今回は基本的な以下2点まとめてみました。


  • クラスの定義

  • 初期処理の定義


コード

class HelloWorld

# 初期処理の定義
def initialize(myname = "Ruby")
@name = myname
end

end


クラスの定義

 class クラス名

クラスの定義
end


  • クラス名は必ず大文字スタート

  • 今回HelloWorldというクラスを定義してます。


初期処理の定義

  def initialize

処理
end



  • initializeメソッドは、newでインスタンスを生成した際、実行されるメソッド

  • 詳しくは、次のインスタンスについてに実行例を記載してます。


インスタンスについて

インスタンスについて、実際にコードを書きながら以下4点まとめてみました。


  • インスタンス変数とは

  • 初期処理実行

  • インスタンス生成

  • インスタンスメソッド定義

  • インスタンスメソッド実行


コード

class HelloWorld

# ①初期処理実行
def initialize(myname = "Ruby")
@name = myname
end

# ②インスタンス生成
bob = HelloWorld.new("Bob")
alice = HelloWorld.new("Alice")
ruby = HelloWorld.new

# ③インスタンスメソッド定義
def hello
puts "Hello, world. I am #{@name}."
end

# ④インスタンスメソッド実行
bob.hello
alice.hello
ruby.hello

end


実行結果

Hello, world. I am Bob.

Hello, world. I am Alice.
Hello, world. I am Ruby.


解説


インスタンス変数とは



  • @変数名で、インスタンス変数の宣言可

  • インスタンス変数は、インスタンス内であれば、メソッドスコープ関係無く参照可

  • インスタンス変数は、インスタンスメソッドから参照可


①初期処理実行


  • インスタンス変数@nameに初期値Rubyを代入しているため、引数が何も無かった場合@nameRubyになる


②インスタンス生成



  • クラス名.newで生成

  • 生成したインスタンスを変数に代入可。今回は変数bob・alice・rubyでそれぞれ受取。


  • bob = HelloWorld.new("Bob")の場合、インスタンス生成時に呼び出されるメソッドinitializeの引数がBobとなり、@nameは引数のBobとなる。※aliceも同様


  • ruby = HelloWorld.newの場合、インスタンス生成時に呼び出されるメソッドinitializeの引数は無いため、@nameは初期値のRubyとなる。


③インスタンスメソッド定義


  • 定義方法

def メソッド名

処理内容
end


④インスタンスメソッド実行



  • インスタンス.メソッドで実行


参考にしたリンク