はじめに
プロを目指す人のためのRuby入門[改訂2版](通称:チェリー本)を読んでの感想を記載いたします。
良かったところ
- ほかのプログラミング言語に触れたことがある読者に対して、「他言語ではこうだけどRubyの特徴はこう!」というような書き方が全体的に多いこと。
- 私はJavaをメインに他の言語に触れたことがありますが、別言語としての差分に集中してRubyの情報をインプットできました。
- 本書は、Rubyの入門本を紹介されているサイトでは完全初心者用ではなく中級者〜上級書用に分類されることが多い印象です。完全なプログミング初心者には少し難易度が高いかもしれません。
- 例題のなかでリファクタリング作業があること。このリファクタリングを通して「Rubyではかなりシンプルな構文でプログラムを書ける」ということを体感できること。
- 各章に一つ例題があるのですが、動くプログラムが完成した後にリファクタリングの作業を行います。リファクタリングを行った後はかなりシンプルになるので驚きが多かったです。
学んだこと
- 他の言語との違いについて印象に残った部分を記載いたします。
他の言語との違いについて・基本構文について
- 数値と文字列は暗黙的に変換されない。
- 最後に評価された式がメソッドの戻り値になるのが特徴。returnはメソッドを途中で脱出する際に使われることが多い。
- if文以外のところで
&&
や||
を意図的に使う場合がある。 - エイリアスメソッドが多くある。
- 文字列や配列の添字に負の数字が使える。-1は最後の要素、-2は最後から2番目の要素。
-
X ||= A
で変数Xがnilまたはfalseなら、AをXに代入(nilガード) - メソッド定義も式になっている。メソッド名をシンボルとして返す。
- 定数は「絶対変更できない値」ではない。「変更しようと思えばいくらでも変更できる値」になっている。扱う上では自己防止策が必要。
他の言語との違いについて・オブジェクト指向に関する構文について
- クラス定義も上から順に実行される。そのため、クラス構文直下でクラスメソッドを呼び出すことができる。
- 継承できるスーパークラスは1つだけ。ただしミックスインという多重継承に似た機能がある。
-
public protected private
のような可視性は、単語名は同じであるが他の言語と少し異なる。 - 抽象クラスやインターフェースは存在しない。
他の言語との違いについて・例外処理について
- throw、catchは例外処理とは関係ない。
- 他言語でいう
try~catch~finally
は、begin~rescue~ensure
と書く。 - rescueにExceptionクラスを指定するのはRuby的には好ましくないコードになる。
- 意図的に例外を発生させるのは
raise
メソッドを使う。 - rescueは修飾子としても使える。
難しかったこと
- チェリー本に記載されている初歩的なコードでも「Rubyのコードは言語としての事前知識を知らないと読めないコードが多い」という印象を強く受けました。(nilガード等)
- Rubyとしての言語の特性を活かした書き方を自分で実際に書いてみてRubyの構文に慣れる必要があると感じました。
- Rubyは条件文でさえも式として評価され戻り値を返しているので、あらゆるものが式になっているという意識をもつことも大切に感じました。
- 私の理解力ではチェリー本に記載の内容を一度では理解できなかったので、何度も復習することが大事に感じました。
- 例題以外の演習も行いたかったため、現在は簡単な演習本を購入しチェリー本で学んだ知識定着のための作業を行なっています。