0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【備忘録】Ruby : クラスメソッド、インスタンスメソッド使い方

Last updated at Posted at 2020-02-12
sample.rb

class Person
	attr_accessor :from

	def self.lefty(name,age)
		#メソッド名の頭に self. をつけるとクラスメソッドになる。
		new(name,age,"左")
		#newすることでinitializeメソッド呼び出し
	end

	class << self
		#複数のメソッドをクラスメソッドにする方法
		def second_method
			puts "second"
		end

		def third_method
			puts "third"
		end
	end

	def initialize (name,age,foot)
		#new メソッド使った時に使用
		@name = name
		@age = age
		@foot = foot
	end

	def sayHello
		puts "私は #{@name}です。 #{@age}歳です。 利き足は #{@foot}です。"
		#ここで使っている@name,@age,@footはinitializeで定義したものを使っている。
	end

	def sayFrom
		if @from != nil
			puts "私は #{@name}です。 #{@age}歳です。#{@from}出身です。"
			#ここで使っている@fromはattr_accessorの:fromに格納された値を使う。(インスタンス変数)
			#ちなみに @from 部分を from に書き直してもしっかり出力される
		else
			puts "私は #{@name}です。 #{@age}歳です。"
		end
	end
end


person1 = Person.lefty("中村",27)
#クラスメソッドを使用
person1.sayHello

person2 = Person.new("中田",29,"右")
#単純に new
#initializeメソッドの処理でインスタンス変数に引数を突っ込む
person2.sayHello

person3 = Person.new("小野",26,"右")
#単純に new
person3.from = "静岡"
# さらにattr_accessor:fromに静岡をセット=>@from
person3.sayHello
person3.sayFrom

puts person3.from #=>"静岡"
#puts person3.name #=>出力エラー
#解決方法=> attr_accessor に :name を追加
#追加後、=>小野


#foo = Foo.new
#foo.first_method
#foo.second_method
#上記のようにオブジェクトを生成した後にクラスメソッドを呼び出すことは不可能


出力結果

私は 中村です。 27歳です。 利き足は 左です。
私は 中田です。 29歳です。 利き足は 右です。
私は 小野です。 26歳です。 利き足は 右です。
私は 小野です。 26歳です。静岡出身です。
静岡
0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?