らくだ🐫にもできるRailsチュートリアル|4.4(と4.5)

4.4 Rubyにおけるクラス

4.4.1 コンストラクタ

リテラルコンストラクタとは何ぞ

リテラル → コードに直接書かれた文字や数字
コンストラクタ → インスタンスを作成した時に自動的に実行されるメソッド

うーん。これは雰囲気でふわっと掴んでれば良さそう感?(?

配列とハッシュでインスタンスを生成

・配列のコンストラクタ →Array.new
・ハッシュのコンストラクタ →Hash.new

クラスメソッド → クラス自身に対して呼び出すメソッド(上記のnew)
クラスメソッドで呼び出された結果 → そのクラスのオブジェクト(クラスのインスタンス)
クラスの中でインスタンスに対して呼び出すメソッド → インスタンスメソッド

演習

  1. 1から10の範囲オブジェクトを生成するリテラルコンストラクタは何でしたか? (復習です)
  2. 今度はRangeクラスとnewメソッドを使って、1から10の範囲オブジェクトを作ってみてください。ヒント: newメソッドに2つの引数を渡す必要があります
  3. 比較演算子==を使って、上記2つの課題で作ったそれぞれのオブジェクトが同じであることを確認してみてください。

Rangeのクラスメソッド → 第一引数と第二引数までの範囲オブジェクトを返す

4.4.2 クラス継承

superclassメソッド →クラスの親クラスが返ってくる

全てのRubyオブジェクトはBasicObjectクラスを継承している!

文字列を引数に取るならStringクラスを継承するのが自然

また、Stringクラスを継承している為、superclassメソッドを使ってクラス階層を確認すると
「Word < String < Object < BasicObject」であることが確認できる

self.の省略

なお、Stringクラスの内部では、メソッドや属性を呼び出すときのself.も省略可能です。

演習

  1. Rangeクラスの継承階層を調べてみてください。同様にして、HashとSymbolクラスの継承階層も調べてみてください。
  2. リスト 4.15にあるself.reverseのselfを省略し、reverseと書いてもうまく動くことを確認してみてください。

2.は上記(self.の省略)の通り上手く動く

4.4.3 組み込みクラスの変更

palindrome?メソッドをStringクラス自身に追加して
リテラルな文字列に対して直接実行することは可能か?
→可能(ただし、正当な理由が無い場合は無作法に当たる)

演習

  1. palindrome?メソッドを使って、“racecar”が回文であり、“onomatopoeia”が回文でないことを確認してみてください。南インドの言葉「Malayalam」は回文でしょうか? ヒント: downcaseメソッドで小文字にすることを忘れないで。
  2. リスト 4.16を参考に、Stringクラスにshuffleメソッドを追加してみてください。ヒント: リスト 4.12も参考になります。
  3. リスト 4.16のコードにおいて、self.を削除してもうまく動くことを確認してください。

4.4.4 コントローラクラス

  • Railsのcontrollerにもクラスがあり、階層になっているし継承されている
  • controllerに書かれたアクションはメソッド

→Railsのアクションでは戻り値はないし返される値は重要ではない
RailsとRubyは別物!

演習

  1. 第2章で作ったToyアプリケーションのディレクトリでRailsコンソールを開き、User.newと実行することでuserオブジェクトが生成できることを確認してみましょう。
  2. 生成したuserオブジェクトのクラスの継承階層を調べてみてください。

4.4.5 ユーザークラス

sample_appで使用するUserクラスを作成する

attr_accessorとは何ぞ

「attr_reader」→ゲッター・データを取り出すためのメソッド
「attr_writer」→セッター・データを代入するためのメソッド
この2つを合わせたメソッド→「attr_accessor」
→属性に対応するゲッターとセッターをそれぞれ定義してくれる便利なメソッド

このコードによりインスタンス変数@nameとインスタンス変数@emailにアクセスできるようになる(インスタンス変数とは後程どこかで)

initializeメソッドとは何ぞ

インスタンス生成時に自動的に呼び出されるメソッド・引数も渡せる

formatted_emailメソッドを定義

呼び出したときにユーザーの名前とemailが表示される様にメソッドを定義する
@nameと@emailはUserクラスのインスタンス変数なのでUserクラス内で自動的に使用できる

コンソールで試してみる

演習

  1. Userクラスで定義されているname属性を修正して、first_name属性とlast_name属性に分割してみましょう。また、それらの属性を使って “Michael Hartl” といった文字列を返すfull_nameメソッドを定義してみてください。最後に、formatted_emailメソッドのnameの部分を、full_nameに置き換えてみましょう (元々の結果と同じになっていれば成功です)
  2. “Hartl, Michael” といったフォーマット (苗字と名前がカンマ+半角スペースで区切られている文字列) で返すalphabetical_nameメソッドを定義してみましょう。
  3. full_name.splitとalphabetical_name.split(’, ’).reverseの結果を比較し、同じ結果になるかどうか確認してみましょう。

4.5 最後に

4.4.5で作成したexample_user.rbファイルは今後使わないので、削除してください。

適宜commit

本文ではmasterブランチにマージだけどプルリクの練習↓
ブランチのままGitHubにpush
GitHub上でプルリク→マージ
fetchしてmasterにcheckoutしてpullの流れ

以降まとめに付き本文ママ

まとめとか感想

長かった!やっと終わった!!4章!!
勉強感が強くて苦手な4章ですが、流さないように意識しつつ頑張りました!
1週目の時よりかなり頭に入ったと思います。頑張った!!

らくだ🐫にもできるRailsチュートリアルとは

「ド」が付く素人のらくだ🐫が勉強するRailsチュートリアルの学習記録です。
自分用に記録していますが、お役に立つことがあれば幸いです。

調べたとはいえらくだ🐫なりの解釈や説明が含まれます。間違っている部分もあるかと思います。そんな所は教えて頂けますと幸いなのですが、このブログにはコメント機能がありません💧お手数おかけしますがTwitterなどでご連絡いただければ幸いです