Railsチュートリアル(第四版)学習記録: 第四章

今回は4章、Rubyの知識を拡充しようという章ですね。udemyの講座でもやっていますが、まとめてがっとできるいい章だと思うのでこの章でrubyの基礎を終えたいです。いつも通り、トピックブランチを作って作業をします。

ページタイトルが正しく表示されない問題を解決するために、full_titleヘルパーを作成します。このヘルパーはページタイトルが前回のように<%provide(:title, “Home”%>のように指定されているときはそれを含めて、定義されていなければ基本タイトルを返します。コードはこんな感じ。

home画面のタイトルにはhomeという単語を表記させたくないので、homeという単語が出てきていないかどうかをチェックするテストを行います。前回記述したテストコードを少し書き換えます。確認ですが、”assert_select”は該当のhtmlタグにある特定のセンテンスが含まれているかをチェックするためのものでした。コードは以下の通りです。 home.html.erbからprovideのコードを削除すればパスするはずです。

と思ったのですが、いくつかエラーが出てしまいました。エラーコードを見てみると、” expected but was<Help|Ruby on Rails Tutorial Sample App>..”となっています。つまりhelp前後のスペースが間違っているんですね。そうかrubyは空白も認識するのか。ということで間隔を詰めてもう一度testを実行するとパスしました。

さて、ここからはrubyをコンソールで練習していくのですが、内容はそこまで難しくないのでメモに残したいところ以外は割愛します。気になったのはオブジェクトとメッセージ受け渡しのところです。「オブジェクトが何であるかを説明するのは難しいが、オブジェクトが何をするかを説明するのは容易い」ようです。「オブジェクトとはメッセージに応答するもの」で、「オブジェクトに渡されるメッセージのことを我々はメソッドと呼ぶ」ようです。メソッドの中にある”?”が他の言語と比較しても異彩を放っていますね。rubyではこの?が真偽値を出すときに好まれるそうで、例えば

このコードであれば「変数sは空っぽですか?」というifの問いに対して「はい、空っぽです」ならemptyと返し、「いいえ、空っぽではありません」ならno emptyと返します。これ、英語よりはむしろ日本語に文法が近いので日本人には覚えやすいかもしれないですね。rubyではあらゆるものがオブジェクトなのでnilもオブジェクトとして扱うことが可能です。ただ、nilってそもそも「中身は空っぽです」って意味なので、このnilを文字列に変更してからメソッドを効かせる必要があります。

また、これも若干日本語を使うときの脳と同じ記法な気がするのですが、後続if、後続unlessというものもあるそうで、

この場合、「もし、xがemptyじゃないなら、emptyじゃないって表記してね」という意味ですね。

少し空きましたが、moduleについての説明もありました。モジュールは関連したメソッドを束ねる方法の一つで、普通includeメソッドを使って読み込みます。(これは以前scssの読み込みでもやった記憶が・・・)ただ、railsは自動的にヘルパーモジュールを読み込んでくれて、全てのビューで用いることができるそうなのであえて読み込む必要はないようです。さすがrails。

配列やらループについてはもう結構やったのでここであえて触れませんが、一つだけ。ruby共通の記法では短い一行のブロックに関しては{}で、複数行にまたがる場合には.each doを使うみたいです。ブロックの理解のために、testコードを一つ例にとっています。コードはこれまで何度も見たこれです。

testメソッドは文字列とブロックを引数にとり、テストが実行(do)されるとブロック内の文が実行されます。

継承についても触れられています。newというメソッドを使うことであるクラスのインスタンスを作ることができます。インスタンスとはとあるクラスで定義されたメソッドを全て継承した新しいオブジェクトのことです。例えば、stringオブジェクト、というものが存在したとします。このstringオブジェクトは文字列に関係する全てのメソッドを使うことができます。例えば、このようにインスタンス変数を定義します。

こうすれば、stringメソッドで使える全てのメソッドをこの変数sでも用いることができるようになるのでした。

これで4章目も終わりです。rubyのオブジェクトやクラスとその継承について大まかにですがわかった気がします。少なくとも1周目よりはわかったからよし(としよう)。5章からはいよいよ具体的にアプリの実装に入っていくので楽しみです。ではでは。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする