アラサーからのエンジニア転身blog

プログラミングの勉強や転職に関して記事にしていきます。

ruby基礎④インスタンス変数へのアクセス、self、クラスメゾット・クラス変数・クラス定数の定義、クラスの継承、オーバーライド

ルビーの基礎も大詰めです。
次回で基礎は終わるので、その次はスクールで作ったrubyのアプリケーションの確認をしていきたいと思います。


本日も渋谷にある急成長中の企業に訪問させていただきました。
エンジニアとして活躍されている方と話をさせていただきました。

『プログラミングは日々変化していくので、それをいかにキャッチアップできるかが重要』

ありがたきお言葉!!

基礎を固めたら、どんどん新しい技術にも挑戦していきたい!!

# -----------------------------------------------------------------
# インスタンス変数にアクセス アクセサ

class User

  attr_accessor :name #setterとgetterの両方
  attr_reader :name #getterのみ
  #setter: name=(value) 値をセットする方
  #getter: name 値を取得する方

  def initialize(name) #initializeはインスタンスが生成されたタイミングで発動
   @name = name #インスタンス内に情報を保持できるインスタンス変数@にnameを追加 インスタンス変数はそのクラス内であれば使用可能
  end

  def sayHi
    puts "hi! i am #{@name}"
  end

end

sakurai = User.new("sakurai")
p sakurai.name
sakurai.sayHi

sakurai.name = "kondo"
p sakurai.name
sakurai.sayHi

=>

"sakurai"
hi! i am sakurai
"kondo"
hi! i am kondo


# -----------------------------------------------------------------
#selfに関して

class User

  attr_accessor :name #setterとgetterの両方

  def initialize(name)
   @name = name
  end

  def sayHi
    #selfはそのメゾットを受け取っているインスタンス自身になる
    # self.name -> @name
    puts "hi! i am #{@name}"
    puts "hi! i am #{self.name}"
    puts "hi! i am #{name}" #self省略
    #selfはそのメゾットを受け取っているインスタンス自身になりレシーバーともいう
  end

end

sakurai = User.new("sakurai")
p sakurai.name
sakurai.sayHi

sakurai.name = "kondo"
p sakurai.name
sakurai.sayHi

=>

"sakurai"
hi! i am sakurai
hi! i am sakurai
hi! i am sakurai
"kondo"
hi! i am kondo
hi! i am kondo
hi! i am kondo

#-----------------------------------------------------------------
# クラスメゾットの定義
# クラスメ変数の定義
# クラスメ定数の定義

class User

  @@count = 0 #クラス変数の定義

  VERSION = 1.1 #クラス定数の定義

  def initialize(name)
   @@count += 1 #クラスが生成されるごとにカウントアップ
   @name = name
  end

  def sayHi
    puts "hi! i am #{@name}"
  end

  def self.info #クラスメゾットの定義
    puts " #{VERSION}: User class ,#{@@count} instances."
  end

end

sakurai = User.new("sakurai")
kondo = User.new("kondo")
naoya = User.new("naoya")
User.info
p User::VERSION #::でクラス変数を呼び出せる
=>
 1.1: User class ,3 instances.
1.1

#-----------------------------------------------------------------
# クラスの継承

class User

  def initialize(name)
   @name = name
  end

  def sayHi
    puts "hi! i am #{@name}"
  end

end

# User:親クラス,Super Class
# AdminUser:子クラス,Sub Class
class AdminUser < User

  def sayHello
    puts "Hello from #{@name}"
  end

end

sakurai = AdminUser.new("sakurai")
sakurai.sayHi
sakurai.sayHello
=>
hi! i am sakurai
Hello from sakurai

#-----------------------------------------------------------------
# オーバーライド
class User

  def initialize(name)
   @name = name
  end

  def sayHi
    puts "hi! i am #{@name}"
  end

end

# User:親クラス,Super Class
# AdminUser:子クラス,Sub Class
class AdminUser < User

  def sayHello
    puts "Hello from #{@name}"
  end

  def sayHi #オーバーライド
    puts "hi! i from admin"
  end

end

sakurai = AdminUser.new("sakurai")
sakurai.sayHi
sakurai.sayHello
=>
hi! i from admin
Hello from sakurai
#-----------------------------------------------------------------