Rubyのインスタンスメソッドとクラスメソッドの違いをわかりやすく。
はじめに
今までRubyの重要概念であるインスタンス,クラスについて明確にわかっていなかったので例を挙げながら説明していきます。Ruby使う上で絶対にわかっていなければならないことだと思うのですが、理解が甘かったので。
本記事の対象
・Ruby初めての方
・クラス、インスタンスが曖昧になっている人
インスタンス・クラスとは
例として、twitterのようなサービスで、Tweetクラスのもと、下のようにuserたちがidが1~3の投稿をしていることとします。
このとき黒い四角でかこった一つ一つの投稿はインスタンスです。インスタンスはクラスの型から生成されたオブジェクトといわれます。そしてTweetはクラスです。インスタンスがクラスに属しているイメージです。
Rubyの重要概念です!!
コードで理解
class Tweet
#クラスメソッド
def self.tweet
puts "tweet"
end
#インスタンスメソッド
def post_tweet(user,about)
puts "#{user}さんが#{about}について投稿しました"
end
end
#実行
Tweet.tweet
new_tweet = Tweet.new()
new_tweet.post_tweet("choco","プログラミング")
実行後
tweet
chocoさんがプログラミングについて投稿しました
クラスメソッド => クラスに対して行われるメソッド。
・classの外で 「クラス名.メソッド」 で呼び出す。(上の例だとTweet.tweet)
・selfを削ると怒られる。(selfでクラスメソッドだと宣言する)
=>クラスの中で self.メソッド名 ~~ end で定義できます。
・all,newなどはあらかじめ定義されているクラスメソッドで、クラスに対しての操作ができます。(allはクラスのインスタンスを全部取得、newはクラスに新しいインスタンスを作成)
インスタンスメソッド=>インスタンスに対して行われるメソッド。
・classの外で 「インスタンス名.メソッド」で呼び出す。(上の例だとnew_tweet.post_tweet)
インスタンスはクラスに属すため、クラス名.newでインスタンスを作成して、そのインスタンスに対してメソッドを実行します。
・基本的に実装中はインスタンスメソッドを使うことが多いと感じます。
おわり
この記事を書いていて、Rubyがすごくわかりやすく・直感的な設計なのだと思いました。これからもう少しちゃんとインスタンス・クラスを強く意識してメソッド定義していこうと思います。
読んでくださった方、ありがとうございました。
ご指摘がありましたらよろしくお願いします。
Author And Source
この問題について(Rubyのインスタンスメソッドとクラスメソッドの違いをわかりやすく。), 我々は、より多くの情報をここで見つけました https://qiita.com/maominionbsk54/items/f9f09685e9c27be085f4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .