【Railsチュートリアル】第4章 演習問題解答 2/2

【Railsチュートリアル】第4章 演習問題解答 2/2

【Railsチュートリアル】第4章 演習問題解答 1/2
の続きです。
ここからクラスを扱いだします。

目次

4.4.1 コンストラクタ

1.1から10の範囲オブジェクトを生成するリテラルコンストラクタは何でしたか? (復習です)

解答

リテラルコンストラクタってのはnewとかしないでクラス作ってくれちゃうやつ
そんな認識でいいんじゃないかな。ざっくりわかることも大事です。

つまりはRange.new(〜〜)ってしないでどうやってRangeオブジェクト作ってましたか?
って問題

こうやってやってましたね。

2.今度はRangeクラスとnewメソッドを使って、1から10の範囲オブジェクトを作ってみてください。ヒント: newメソッドに2つの引数を渡す必要があります

解答

Rangeは引数は始まり終わりの2つ引数が必要です。
以下のようになります。

3.比較演算子==を使って、上記2つの課題で作ったそれぞれのオブジェクトが同じであることを確認してみてください

解答

変数名適当すぎたのを今になって後悔w
1.ではa,2.ではbとしていたので、以下のようになります。

4.4.2 クラス継承

1.Rangeクラスの継承階層を調べてみてください。同様にして、HashとSymbolクラスの継承階層も調べてみてください。

解答

先ほどのbを使って調べてみます。

Range=>Object=>BasicObject
となることがわかりました。

ハッシュも同様に

Hash=>Object=>BasicObject
となります。

シンボルも同様に

となるので
Symbol=>Object=>BasicObject
となることがわかります。

2.リスト 4.15にあるself.reverseのselfを省略し、reverseと書いてもうまく動くことを確認してみてください。

解答

self.reverseをreverseとして定義しました。

Stringクラスを継承したWordクラスのインスタンスは
palindrome?というメソッドを使うことで回文かどうか調べられるようになったわけなので、
それを確かめたいと思います。

最初はabcは回文でないのでfalse、abcbaは回文となるのでtrueを返します。
OKですね。

4.4.3 組み込みクラスの変更

Rubyは基本クラスまでいじれるんですよ。というのがミソ。

Stringクラスにpalindromeメソッドを追加しました。

1.palindrome?メソッドを使って、“racecar”が回文であり、“onomatopoeia”が回文でないことを確認してみてください。南インドの言葉「Malayalam」は回文でしょうか? ヒント: downcaseメソッドで小文字にすることを忘れないで。

解答

ほぼ復習ですね。

2.リスト 4.16を参考に、Stringクラスにshuffleメソッドを追加してみてください。ヒント: リスト 4.12も参考になります。

解答

これも復習ですね。

3.リスト 4.16のコードにおいて、self.を削除してもうまく動くことを確認してください。

解答

selfは省略できるというお話です。

4.4.4 コントローラクラス

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

解答

実際に確かめてみればOKです。

2.生成したuserオブジェクトのクラスの継承階層を調べてみてください。

解答

手順は変わりません。

User=>ApplicationRecord=>ActiveRecord::Base=>Object=>BasicObject
となります。

4.4.5 ユーザークラス

(オワビ)exsample_user.rbを作らずコンソールでやってしまいました…
結果は変わらないので、優しい目で見てください…

1.Userクラスで定義されているname属性を修正して、first_name属性とlast_name属性に分割してみましょう。また、それらの属性を使って “Michael Hartl” といった文字列を返すfull_nameメソッドを定義してみてください。最後に、formatted_emailメソッドのnameの部分を、full_nameに置き換えてみましょう (元々の結果と同じになっていれば成功です)

解答

ちょっと長いのでコメントいれてみました。

  • nameがfirst_nameとlast_nameに分かれること
  • formatted_emailで自クラスの関数を実行するためにselfを使用する

以上がポイントかと思います。

2.”Hartl, Michael” といったフォーマット (苗字と名前がカンマ+半角スペースで区切られている文字列) で返すalphabetical_nameメソッドを定義してみましょう。

解答

クラスは拡張ができるので、1から宣言せずとも追加するものだけ書けばいいです。

3.full_name.splitとalphabetical_name.split(’, ’).reverseの結果を比較し、同じ結果になるかどうか確認してみましょう。

解答

両者実行して確かめれば良いです。
userを頭につけてくださいね。

あーやっちまった。
まあいいでしょうということにしておきましょう(そうさせてください)

(おまけ)
一応ちゃんとやりなおしました。
よかったら見てやってください。

プログラム

コンソール実行結果

4章長かったぁ。。
でもこの章は2周目で理解が深まるゾーンですね。

以上、コジマでした。

Railsチュートリアルカテゴリの最新記事