クラスメソッドとインスタンスメソッドについて、検索して色々と読んでいたのですが書き方の違いはわかっても、その使い分けについて、はっきりとわかりませんでした、、
クラスメソッドはそのクラス全体に関するものを変更する?ときにつかい、インスタンス変数は生み出したインスタンス(carクラスがあれば、honda-carとか?)を変更する際に使う、というようなイメージなのかなーと思ったのですが、これがあっているかもわからないし、実際の開発ではどのように使い分けるのかな、と疑問に思いました。
どなたか例を交えて教えて頂けると、大変嬉しいです。
よろしくお願いします!
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
クラスメソッドとは「クラスオブジェクトから実行可能なメソッド」です。
※クラスメソッドはクラスをレシーバ(.の左側)として呼び出すメソッドでもあります。
またインスタンスメソッドについてはクラスに対してではなく、「クラスのインスタンス(実体)」に対して紐づけられるメソッドです。
こちらのページに記載があります。
https://www.sejuku.net/blog/19208
補足で説明をすると、
# クラスメソッド # クラスであるHomeが持っているメソッド(self.pc)を呼び出して実行。 # つまりクラス自身が実行できるメソッドがクラスメソッドと言えます。 class Home def self.pc print("Personal Computer") end end Home.pc
# インスタンスメソッド # Japaneseクラスを.newでインスタンス化したinstanceが、 # Japaneseクラスの持っているメソッド(nagase)を呼び出して実行。 # つまり、クラスのインスタンスが実行できるメソッドがインスタンスメソッドです。 class Japanese def nagase print("Nagase Rai") end end instance = Japanese.new instance.nagase
簡単に言えば、
・レシーバー(.の左側)がオブジェクト(インスタンス)の場合はインスタンスメソッド。
・レシーバーがクラスの場合はクラスメソッド。
となります。
クラスメソッドはインスタンスを作成する時に使用されるというのは、
例えば新しく配列を作る場合には、
array = Array.new
のように書きますが、この「Array.new」などもArrayクラスがnewというクラスメソッドを呼び出して配列のインスタンスを作成し、arrayへ代入する流れになるので、インスタンス作成に使われると言われているのだと思います。
そして、作られたarrayインスタンス変数が使用できるメソッドがインスタンスメソッドなわけです。
どちらのメソッドも、Arrayクラスが持っている事になりますが、クラスが呼び出せるもの、インスタンスが呼び出せるもので使うタイミングが異なりますので状況に応じてどちらを使うかが変わってくるわけです。
投稿2020/05/08 05:59
総合スコア306
0
インスタンスメソッド→そのインスタンスの属性を参照・変更するなど、個々のインスタンスの状態によって結果が変わる処理
クラスメソッド→個別のインスタンスには関係がないけどクラス横断的に関係のある処理
投稿2020/05/08 04:18
総合スコア8947
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/08 06:01 編集
2020/05/09 14:43
2020/05/09 14:51
2020/05/09 15:32
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/09 08:19
2020/05/09 09:50
2020/05/10 05:32
2020/05/10 09:46
2020/05/10 13:03