株式会社diffeasyの中尾です。
エンジニアになってもうすぐ半年になります。
アドベントカレンダー4日目で何を書こうか迷いましたが、知識がモヤっとしている事を整理しようと思いました。
そこで、普段Railsを使用しているのですが、クラスとかインスタンスが自分の中でモヤっとしていたので「楽しいruby」で復習してみました。
https://www.amazon.co.jp/dp/4797386290/ref=cm_sw_r_tw_dp_U_x_vesbCbC09HZZV
#イメージ
クラスが型で、その型から生成したものがインスタンスと良く書かれてますが、スマートフォンでイメージを整理してみました。
スマートフォンクラスに、スマートフォン共通の機能を持たせ、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
を代入しているため、引数が何も無かった場合@name
はRuby
になる
###②インスタンス生成
- クラス名.newで生成
- 生成したインスタンスを変数に代入可。今回は変数
bob・alice・ruby
でそれぞれ受取。 -
bob = HelloWorld.new("Bob")の場合、インスタンス生成時に呼び出されるメソッド
initialize
の引数がBob
となり、@nameは引数のBobとなる。※aliceも同様 -
ruby = HelloWorld.newの場合、インスタンス生成時に呼び出されるメソッド
initialize
の引数は無いため、@nameは初期値のRubyとなる。
###③インスタンスメソッド定義
- 定義方法
def メソッド名
処理内容
end
###④インスタンスメソッド実行
- インスタンス.メソッドで実行
#参考にしたリンク
- (インスタンスオブジェクトについて)http://melborne.github.io/2013/02/07/understand-ruby-object/
- (インスタンスメソッドについて)https://qiita.com/tbpgr/items/56eb65c0ea5882abbb07