【Rails】継承_インスタンスについて_Railsチュートリアル 4章より

Rails tutorialの第4章を終えました。
その時の気づいたこととか備忘録を何部かに分けて。
今回はオブジェクト指向に絡む継承とかインスタンスとかについて
前回はこちらです。

0.準備として

本番リリース以外は
基本的にはマスターブランチはいじらずに
トピックブランチを作るなど
別ブランチで作業をします。
$ git checkout -b rails-flavored-ruby

継承

既存のクラスに変更を加えずに、新しい機能をつけたり、カスタマイズして新しいクラスを作ることをみます(継承)
例えばStringクラスの親クラス(スーパークラス)はObjectであり、その親クラスはBasicObjectです
String<Object<BasicObject

またユーザが作成したクラス以外にもStringクラスといった、組み込みクラスも機能追加といった変更が可能です。
なのでやろうと思えば以下もできます

class String
   # 文字列が回文であればtrueを返す
   def palindrome?
     self == reverse
   end
 end

と定義して、 "deified".palindrome?を実行すると回文かどうかを判定してtrueが帰ってきます
(self == self.reverseの省略してself == reverseとかけます。)

メソッドについて

メソッド呼び出しの際のかっこの省略について

application.html.erb内に自動で作成される

 <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>


stylesheet_link_tag ('application', { media: 'all', 'data-turbolinks-track': 'reload' }

ともかける。
要は丸括弧は省略可能であり、ハッシュがメソッドの最後の引数であれば{}波かっこを省略できる。 あとはstylesheet_link_tagについてはRailsドキュメントがあります stylesheet_link_tag - リファレンス - - Railsドキュメント

アクセサー

attr_accessor :name, :email

コントローラやモデルにアクセサーを作成すると、そのデータを取り出すメソッド (getter) と、データに代入するメソッド (setter) をそれぞれ定義してくれます。具体的には、この行を実行したことにより、インスタンス変数@nameとインスタンス変数@emailにアクセスするためのメソッドが用意されます。

インスタンス

インスタンスはinitializeメソッドで定義します。これを定義してあげることで newした時に自動的に変数がnilで作られます。

class User
  attr_accessor :name, :email

  def initialize(attributes = {})
    @name  = attributes[:name]
    @email = attributes[:email]
  end

  def formatted_email
    "#{@name} <#{@email}>"
  end
end

あとこのクラスをnewして呼び出せば使用できます

exam = Use.new
exam.name = "Tanaka"
exam.email = "aaa@bbb"

puts exam.formatted_email
"Tanaka<aaa@bbb>"

参照

blog.livedoor.jp

wealthlabo.com

qiita.com

記事を作成する際の大いに参考になりました。ありがとうございます。