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>"
参照
記事を作成する際の大いに参考になりました。ありがとうございます。