質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

3回答

1372閲覧

インスタンスメソッドとクラスメソッドの違いについて教えてください。

haruniku

総合スコア527

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/09/02 14:03

編集2018/09/02 14:04

いつもお世話になっております。
Ruby初心者です。
現在、Rubyの勉強中でインスタンスメソッドとクラスメソッドの違いを理解するのに苦しんでます。
分からない部分はendの付く位置です。
何故、インスタンスメソッドの場合はendがclass Macitemの直下に入って
クラスメソッドの場合はdefの終わりに付けるのかがイマイチわかりません。
下記に参考コード記載してますのでご教示頂ければと思います。

インスタンスメソッドの場合

class Macitem end

クラスメソッドの場合

class Macitem end ・ ・ ・ def a.item_num puts "24" puts "13" puts "9" end end
class Macitem a = Macitem.new def a.item_name puts "Mac book" puts "Mac book Pro" puts "iMac" end def a.item_category puts "Laptop" puts "Laptop" puts "desktop" end def a.item_price puts "130,000" puts "150,000" puts "130,000" end def a.item_num puts "24" puts "13" puts "9" end end mactotal = a.item_price macnum = a.item_num print mactotal print macnum

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

なんかいろいろ間違って理解しています。

Ruby

1class Macitem 2 def self.foo 3 puts "Macitem.fooはクラスメソッド" 4 end 5 6 def bar 7 puts "barはインスタンスメソッド" 8 end 9end 10 11a = Macitem.new 12def a.baz 13 puts "a.bazは、特異メソッド(特定のインスタンスのみで使えるインスタンスメソッドの一種)" 14end 15 16Macitem.foo 17a.bar 18a.baz 19 20b = Macitem.new 21b.bar 22b.baz #=> エラー

投稿2018/09/02 14:23

otn

総合スコア84538

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

クラスの外でメソッドを定義することは、一般にあまり行われません。特に、a.item_categoryのような形でメソッドを定義すると、それはそのオブジェクトにしか結びつかない「特異メソッド」となってしまいます。

ruby

1class SomeClass 2 # インスタンスメソッドの定義 3 def instance_method 4 end 5 6 # クラスメソッドの定義 1 7 # ここではクラスオブジェクトがselfなので、それの特異メソッドとして定義 8 def self.class_method_1 9 end 10 11 # 特異クラスを開く 12 # この中で定義したメソッドは、クラスメソッドになる 13 class << self 14 def class_method_2 15 end 16 end 17end

投稿2018/09/02 14:19

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

メソッドはいろいろと定義する方法があるのですが、質問にあるような定義の方法で end の位置が異なるようなことは無いと思います。
下に例を書いてみました。

ruby

1class Macitem 2end 3 4item = Macitem.new 5 6# クラスメソッド 7def Macitem.item_name 8 puts "Mac book" 9end 10 11# インスタンスメソッド 12def item.item_name 13 puts "Mac book" 14end

ソースコードのインデントなどを確認してみてください。

投稿2018/09/02 14:12

kouheiszk

総合スコア213

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問